tcp网络程序-客户端
-
实现步骤
-
导入模块
-
创建套接字
socket.SOCK_STREAM
-
建立连接
tcp_client_socket.connect( (“服务端ip”, 服务端端口) )
-
发送数据
tcp_client_socket.send(“内容”.encode())
-
接收数据
recv_data = tcp_client_socket.recv(1024)
recv_data 是接收到的数据的二进制
-
关闭连接
-
tcp网络程序-服务器
-
导入模块
-
创建套接字
-
绑定端口
-
开启监听(把套接字由主动设置为被动模式)
tcp_server_socket.listen(128) 最大允许128个连接
-
等待客户端连接
new_client_socket,client_ip_port = tcp_server_socket.accept()
new_client_socket 新的套接字,只是服务当前的客户端
client_ip_port 客户端端口和ip地址
-
使用新的套接字接收客户端发送的信息
new_client_socket.recv(1024)
-
关闭新的套接字
new_client_socket.close() 关闭和当前客户端的连接
-
关闭服务器套接字
tcp_server_socket.close() 服务器不再接收新的客户端,老客户端可以继续服务
tcp网络程序-服务器增强
-
循环接收多条信息
while True: # recv() 会让程序再次阻塞,收到信息后再接阻塞 recv_data = new_client_socket.recv(1024) # 当接受到数据为 空 的时候,表示客户端已经断开连接了,服务端也要断开 # if len(recv_data)!= 0: # b'xxxx' # 如果recv_data 非空即为真,否则为假 if recv_data: recv_text = recv_data.decode("GBK") print("接收到[%s]的信息:%s" % (str(client_ip_port), recv_text)) else: print("客户端已经断开连接!") break
-
循环接受多个客户端连接
while True: new_client_socket, client_ip_port = tcp_server_socket.accept() print("新客户端来了:%s" % str(client_ip_port)) # 6、收发数据 while True: # recv() 会让程序再次阻塞,收到信息后再接阻塞 recv_data = new_client_socket.recv(1024) # 当接受到数据为 空 的时候,表示客户端已经断开连接了,服务端也要断开 # if len(recv_data)!= 0: # b'xxxx' # 如果recv_data 非空即为真,否则为假 if recv_data: recv_text = recv_data.decode("GBK") print("接收到[%s]的信息:%s" % (str(client_ip_port), recv_text)) else: print("客户端已经断开连接!") break # new_client_socket.close() 表示不能再和当前的客户端通信了 new_client_socket.close()
注意:必须等待第一个客户端断开后,第二个客户端才能有机会连接