socket编程
1、socket编程流程
原文地址:
socket编程的总体流程如下图所示。 服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。
一个简单的例子:
服务端:
1 import socket
2 server = socket.socket()
3 server.bind(('127.0.0.1',6969)) #绑定要监听的端口
4 server.listen()#监听
5
6 print("我要开始等电话了")
7 #conn就是客户端连过来而在服务器端为其生成的一个连接实例
8 conn,addr = server.accept()#等待电话打来
9
10 print("电话来了")
11
12 data = conn.recv(1024)
13 print("recv:",data)
14 conn.send(data.upper())
15
16 server.close()
客户端:
1 import socket
2
3 client = socket.socket()
4 client.connect(('127.0.0.1',6969))
5
6 client.send(b"Hello world")
7 data = client.recv(1204)
8 print("recv:",data)
9
10 client.close()
先运行服务端,在运行客户端,结果如下:
1 D:\python35\python.exe D:/python培训/s14/day7/socket_server1.py 2 我要开始等电话了 3 电话来了 4 recv: b'Hello world' 5 6 Process finished with exit code 0 7 D:\python35\python.exe D:/python培训/s14/day7/socket_client1.py 8 recv: b'HELLO WORLD' 9 10 Process finished with exit code 0
将上述代码进行改进:
服务端:
1 import socket
2 server = socket.socket()
3 server.bind(('127.0.0.1',6969)) #绑定要监听的端口
4 server.listen()#监听
5
6 print("我要开始等电话了")
7 while True:
8 # conn就是客户端连过来而在服务器端为其生成的一个连接实例
9 conn, addr = server.accept() # 等待电话打来
10 print("电话来了")
11 while True:
12 data = conn.recv(1024)
13 print("recv:",data)
14 if not data:
15 print("client has lost....")
16 break
17 conn.send(data.upper())
18 server.close()
客户端:
1 import socket
2
3 client = socket.socket()
4 client.connect(('127.0.0.1',6969))
5 while True:
6 msg = input(">>:").strip()
7 client.send(msg.encode("utf-8"))
8 data = client.recv(1204)
9 print("recv:",data.decode())
10
11 client.close()
上述代码改进后可以在客户端断开后,服务端不会进入死循环没如果这个时候有新的客户端进入,可以继续通讯


浙公网安备 33010602011771号