建立不中断tcp链接:
tcp服务端:
1 from socket import * 2 3 ip_port = ('192.168.0.101', 8000) 4 buffer_size = 1024 5 back_log = 5 6 7 s_server = socket(AF_INET, SOCK_STREAM) # 启用tcp链接 8 s_server.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) # 允许重复使用IP地址 9 s_server.bind(ip_port) # 服务端绑定ip端口 10 print('服务端已启动,地址为:{},端口为:{}'.format(*ip_port)) 11 s_server.listen(back_log) # 监听客户端数量 12 while True: 13 conn, addr = s_server.accept() # 等待客户端连接 14 print('客户端已连接:', addr) 15 while True: 16 try: # 如果客户端主动断开连接,则捕获异常,断开连接 17 data = conn.recv(buffer_size) 18 if not data: continue # 若客户端发来消息为空,则重新接受——否则会导致tcp处于挂起在接收状态 19 print('客户端发来消息:', data.decode('utf8')) 20 conn.send(data.upper()) # 收到的消息是二进制格式,所以回复的时候不需要处理编码 21 except Exception as e: 22 print(e) 23 break 24 conn.close()
tcp客户端:
1 from socket import * 2 3 ip_port = ('192.168.0.101', 8000) 4 buffer_size = 1024 5 6 s = socket(AF_INET, SOCK_STREAM) 7 s.connect(ip_port) 8 while True: 9 data = input('::>').strip() 10 s.send(data.encode('utf8')) 11 msg = s.recv(buffer_size) 12 print('收到来自服务端的消息:', msg)
注意:tcp是需要建立双向连接的,所以需要监听客户端的链接,同时根据所建立的链接来收发消息。并且tcp的IP和端口绑定后(形成一个通道),建立连接之后不允许其他链接接入。
补:TCP与UDP区别详见:https://blog.csdn.net/li_ning_/article/details/52117463