所以,我有一台服务器使用socket.send()方法向客户端发送响应 . 有时在localhost上测试代码,当客户端连续两次使用socket.send()时,客户端用来接收服务器响应的socket.recv()方法会在一个中获取两个不同的消息 . 例如:服务器:
from socket import *
serverSocket = socket(AF_INET, SOCK_STREAM)
serverPort = 13005
serverSocket.bind(('', serverPort))
serverSocket.listen(1)
connection_socket, client_ip = serverSocket.accept()
connection_socket.send('Message one')
connection_socket.send('Message two')
客户:
from socket import *
serverName = 'localhost'
serverPort = 13005
clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.connect((serverName, serverPort))
print clientSocket.recv(1024)
print clientSocket.recv(1024)
随机运行客户端的结果是
Message oneMessage two
除非我在两个send()之间放一个睡眠(0.1) . 有没有办法避免使用睡眠?我是否需要在recv()方法中输入要接收的确切字节数?
1 回答
TCP是面向流的协议,不会逐个发送消息 . 分割消息的简单方法,您可以在消息的末尾设置拆分字符串,如
\r\n
例:
客户:
服务器:
如果您的消息很复杂且很长,您可以看到:Python Socket Receive Large Amount of Data