im试图用python插座向一个接一个地发送3个数据包。Python将其优化为一个或2个数据包。我通过睡眠命令阻止了它,但是花费了太长时间。我想打开TCP URG标志,有人知道该怎么做吗?
否则您有其他求解?
客户端:
import socket
from time import sleep
IP = '127.0.0.1'
PORT = 5081
BUFFER_SIZE = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((IP, PORT))
s.send('1'*5)
#sleep( 1)
s.send('2'*5)
#sleep( 1)
s.send('3'*5)
s.close()
服务器端:
import socket
IP = '0.0.0.0'
PORT = 5081
BUFFER_SIZE = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((IP, PORT))
s.listen(1)
connection, address = s.accept()
while 1:
#Here I expected to get the 1nd value
data1 = connection.recv(BUFFER_SIZE)
#end of communication
if not data1:
break
print 'data1', data1
#Here I expected to get the 2nd value,but both inputs arrived here, 22222 and 33333
data2 = connection.recv(BUFFER_SIZE)
print 'data2', data2
#Here I expected to get the 3nd value
data3 = connection.recv(BUFFER_SIZE)
print 'data3', data3
connection.close()
谢谢avinoam
您甚至不应该尝试。TCP是一种流协议,应用作流协议(意味着单个字节序列)。即使在使用您的系统上使用localhost时,设法保持数据包的分离,如果您在不同主机之间或仅在升级TCP/IP堆栈之后,它也可能会破裂。一旦您的数据包通过代理或软件过滤器,任何事情都可能发生。
流在流上不同对象的正确方法是使用编码对象发件人端并解码客户端端的上层协议。一个示例是一个或两个字节(按网络顺序(如果多个字节)),则是相关字节的大小。或者,您可以想象带有命令,标题和数据的文本协议,或[在此处使用任何内容]