TCP 套接字 - 仅接收部分消息

TCP socket - recive only part of the message

我有一个使用 TCP 通信的客户端和服务器。我想从客户端传输数据到服务器。

客户:

import socket
V=''
for i in range(1,400)
    V=V+"%s %s %s" %s (i,i,i)

s = socket.socket(socket.AF_INT,socket.SOCK_STREAM)
s.connect((IP,PORT))
s.send(V)
s.close

和服务器:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)

while 1:
        connection, addr = s.accept() 
        V_recived = connection.recv(8192)

当我 运行 这两个脚本时,我看到客户端计算机上 V 的大小是 4485 字节,而在服务器计算机上 V_received 的大小在不同 运行s:大部分时间是 1481 字节,有时是 4485 或更少。 据我了解,使用TCP协议应该保证我所有的数据都将被传输,因此我不明白我做错了什么......

有什么想法吗?

您将获得分块的 TCP 数据。这些块的大小可能取决于很多,但你永远不能相信一个包会在一个部分中通过。您始终需要查看是否有更多数据传入。由于我对 python 不是很熟悉,我不知道确切的实现,但通常你会循环直到你得到 0 个字节,然后将你得到的包加起来。

编辑:

试试这个:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)

connection, addr = s.accept() 
while 1:
    data = conn.recv(8192)
    if not data: break
    print "received data:", data

在此处找到:https://wiki.python.org/moin/TcpCommunication