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
我有一个使用 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