簡體   English   中英

通過TCP協議通過Python發送一對一的消息?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM