【发布时间】:2020-01-09 14:07:09
【问题描述】:
我正在尝试创建某种客户端监视器,例如终端,以通过以太网从串行设备接收数据。我正在尝试使用带有 python 的套接字,但是当我创建连接时问题就来了。我应该只收到来自服务器的一条消息,我得到了整个消息,但分成了两个数据包,如下所示:
预期消息:
b'-- VOID MESSAGE--'
收到消息:
b'-- VOID'
b' MESSAGE--'
不知道是缓冲区大小、解码还是其他功能的问题
import socket
TCP_IP = '192.168.#.#'
TCP_PORT = ###
BUFFER_SIZE = 1024
data1=' '
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
while(1):
data = s.recv(BUFFER_SIZE)
print(data.decode('ASCII'))
s.close()
我已经尝试了一些编解码器选项,例如 UTF-8、UTF-16 和 ASCII,但我仍然得到相同的结果。
这个功能帮我解决了这个问题。
while(1):
cadena += s.recv(1)
if (((cadena)[i])=='\n'):
print(cadena.decode('ASCII'))
cadena=b''
i=-1
i+=1
【问题讨论】:
-
这就是套接字的工作原理。即使一条消息全部发送,也不能保证全部到达。您必须继续阅读,直到全部了解为止。
-
您粘贴的代码没有任何接收或发送消息的代码,所以没有任何代码也就不足为奇了。
-
好吧,行数据 = s.recv(BUFFER_SIZE) 是我接收数据的地方。我知道,因为我已经准备好尝试代码,并且我得到了数据,但不是我需要的格式。
标签: python python-3.x sockets tcp