我正在尝试连接到客户端计算机,以便使用 UDP 从我的服务器计算机发送整数值。问题的出现(我相信)是由于服务器计算机在 python 中发送和侦听 UDP 通信,而客户端从 MATLAB 脚本接收和发送消息。理论上,这种安排应该无关紧要,因为 UDP 通信根本不应受到编码语言的影响。
服务器端代码(python):
import socket
commandVal = 0 #Message to be sent
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(np.uint8(commandVal), (hostIP, portNum)) #hostIP and portNum are defined separately
sock.connect((hostIP, portNum))
while True:
data, addr = sock.recvfrom(1024)
print("received message: %s" % data)
客户端代码(MATLAB):
packetlength = 50
waitdur = 15000
mssgA = judp('receive',port,packetlength,waitdur);
if mssgA(1) == 0
judp('send',port, host,int8('error'))
else
judp('send',port, host,int8('success'))
我知道端口和 IP 定义正确,因为如果我使用基于 MATLAB 的
judp
函数从服务器端进行通信,我可以发送和接收消息。
当使用 python 代码时,消息被发送到客户端,但不会收到返回的“错误”或“成功”消息。这是什么问题?
我尝试更改防火墙设置,并查看
judp
和 socket
的文档。我还没找到解决办法。
问题似乎可能与服务器 Python 代码发送的数据格式有关。在 Python 代码中,您发送的是 np.uint8(commandVal),它是一个 8 位无符号整数,但在 MATLAB 代码中,您需要一条字符串消息(“错误”或“成功”)。
尝试使用 str.encode() 将从服务器 Python 代码发送的数据格式更改为字符串消息,如下所示: sock.sendto('commandVal'.encode(), (主机IP, 端口号)) 然后,在 MATLAB 代码中,您需要更新消息检查以与字符串而不是整数进行比较,如下所示:
if char(mssgA(1:6)) == 'error '
judp('send',port, host, int8('error'))
else
judp('send',port, host, int8('success'))
这应该确保两个脚本之间发送和接收的数据格式正确。