[英]sending one by one message through python over tcp protocol?
嗨,我正嘗試通過python通過TCP協議發送相同的消息10次。 這是python代碼。
import socket
import sys
import random
HOST = '192.168.1.29' # Symbolic name meaning all available interfaces
PORT = 55555 # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket created'
#Bind socket to local host and port
try:
s.bind((HOST, PORT))
except socket.error as msg:
print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
sys.exit()
print 'Socket bind complete'
#Start listening on socket
s.listen(1)
print 'Socket now listening at',HOST, PORT
conn, addr = s.accept()
print 'Connected with ' + addr[0] + ':' + str(addr[1])
count = 0;
while 1:
if (count > 9):
break
else:
count = count + 1
data = ("hello world....!")
conn.send(data)
print "",data
if data == "exit":
break
conn.close()
s.close()
按照代碼,在這里我試圖發送“ hello world” 10次到遠端作為單獨的消息。 簡而言之,每個數據包應只包含一個“ hello world”。 但令我驚訝的是,第一個數據包包含一個hello world消息,而第二個數據包包含9次hello world消息。 您能告訴我為什么會這樣嗎? 代碼中是否有任何錯誤? 如果不是這樣,那么如何通過python在tcp上發送10個不同的數據包,每個數據包包含一個hello world?
嗨,謝謝大家給予及時答復。 我找到我問題的答案。 在一個遠端(發送方),Tcp堆棧將數據存儲到緩沖區中,並等待直到緩沖區將滿並且超時后才在一個數據包中發送消息。 因此,在收到一條消息后,tcp堆棧應該已超時。 如果沒有超時,則tcp堆棧將與下一條消息合並。 就像之前我面對問題一樣。 在這里,我要發送10條不同的四個消息。 在前面的示例hello world中,您可以刪除函數調用,並且前綴數據= hello world it。
這是代碼及其正常工作。 通過wireshark進行了驗證。
import socket
import sys
import random
import time
HOST = '192.168.1.29' # Symbolic name meaning all available interfaces
PORT = 55555 # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket created'
#Bind socket to local host and port
try:
s.bind((HOST, PORT))
except socket.error as msg:
print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
sys.exit()
print 'Socket bind complete'
#Start listening on socket
s.listen(1)
print 'Socket now listening at',HOST, PORT
conn, addr = s.accept()
print 'Connected with ' + addr[0] + ':' + str(addr[1])
count = 1;
var = 0
def read_data(var):
if var == 1:
data = "1 hi"
return data
elif var == 2:
data = "2 how are you"
return data
elif var == 3:
data = "3 where are you?"
return data
else:
data = "4 what are you doing?"
return data
while 1:
if(count < 10):
count = count + 1
var = random.randint(1,4)
read_data(var);
msg = read_data(var);
conn.send(msg)
print "",msg
time.sleep(5)
elif(count==10):
data = "exit"
conn.send(data)
print "",data
time.sleep(5)
break
else:
break
conn.close()
s.close()
如果我理解,您想通過TCP發送數據。 我使用此代碼通過套接字發送字符串
發送
import socket
UDP_IP = "192.168.1.2" #IP of the sender
UDP_PORT = 5005
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.bind((UDP_IP,UDP_PORT))
while True:
data, addr = sock.recvfrom(1024)
print "MSG:" + data
接收
import socket
UDP_IP = "192.168.1.1" #IP of the receiver
UDP_PORT = 5005
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
while True:
try:
data = str("Hello World!")
print len(data)
sock.sendto(data, (UDP_IP, UDP_PORT))
except (KeyboardInterrupt, SystemExit):
raise
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.