服务器未从客户端接收UDP消息(Python到MATLAB)

问题描述 投票:0回答:1

我正在尝试连接到客户端计算机,以便使用 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 matlab sockets udp udpclient
1个回答
0
投票

问题似乎可能与服务器 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'))

这应该确保两个脚本之间发送和接收的数据格式正确。

© www.soinside.com 2019 - 2024. All rights reserved.