一、socket处理单个连接
recv方法不是可以随便接收多大的数据都可以。官方建议是8KB, 即conn.recv(8192)
import socket client = socket.socket() ''' 等价于client = socket.socket(family=socket.AF_INET, type=socket.SOCKET_STREAM) ''' client.connect(('localhost', 6969)) client.send(b"hello, server") data = client.recv(1024) print('收到服务器返回数据:', data) client.close() ####################################### # # 收到服务器返回数据: b'HELLO, SERVER' # #######################################
import socket server = socket.socket() server.bind(("localhost", 6969)) server.listen() # 开始监听 one_person, one_address = server.accept() data = one_person.recv(1024) print('收到客户端数据:', data) one_person.send(data.upper()) server.close() ####################################### # # 收到客户端数据: b'hello, server' # #######################################
区别:客户端和服务器连接一通电话,来回通话,如果客户端断开 Windows里服务器端也断开“远程主机关闭了一个现有连接” Linux里服务器会进入死循环,不停接收到空字符
注意:不能send空字符。如果send空字符服务器端会卡住,因为此时服务器端还在等待接收数据。
二、socket处理单个连接,端口后可以用别的连接启动,客户端输入exit退出
import socket client = socket.socket() client.connect(('127.0.0.1', 6969)) while True: data = input(">>").strip() client.send(data.encode('utf-8')) if data.lower() == 'exit': break print(client.recv(1024).decode("utf-8")) client.close()
import socket server = socket.socket() server.bind(('0.0.0.0', 6969)) server.listen() ############################## while True: first_client, first_address = server.accept() while True: data = first_client.recv(1024) print(first_address, data) if data.decode("utf-8").lower() == 'exit': print("client is lost..") break first_client.send(data.upper()) ##############################