私はpythonソケットで次々と3つのパケットを送信しようとしています。 Pythonはそれを1つまたは2つのパケットに最適化します。 私はそれをsleepコマンドで防止しましたが、時間がかかりすぎます。 TCP urgフラグをオンにすると思っていましたが、誰かがそれを行う方法を知っていますか?Pythonは送信時にパケットを最適化します。それを防ぐ方法は?
または別のソローションがありますか?
クライアント側:
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
なぜバッファサイズを1024に設定すると5バイトになるのですか? – thebjorn
NAGLEアルゴリズムを無効にする: 's.setsockopt(socket.IPPROTO_TCP、socket.TCP_NODELAY、1)' –
@thebjorn - 'recv'は最大のバッファサイズをとりますが、それはソケットの受信にあるすべてのものであれば、バッファ。それは1024バイトを待たない。 – tdelaney