1

我正在尝试向我的步进驱动器(RV,即移动命令)发送一个 ascii 命令。但是我尝试过的所有事情都以 Python 结束(我认为)在“字符串”的开头添加了一个额外的字符;在这种情况下,它添加了一个“g”。步进命令终端不添加“g”。

来自 Wireshark

0000  00 04 a3 22 56 6e f0 1f  af 0b ba fd 08 00 45 00   ..."Vn.. ......E.
0010  00 20 35 b5 00 00 80 11  00 00 c0 a8 4b 62 c0 a8   . 5..... ....Kb..
0020  4b 96 d6 a3 1e 5f 00 0c  18 67 52 56 0a 20         K...._.. .gRV.   

蟒蛇

def main():
    import socket

    data1 = bytes('RV\n ', 'ascii')
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.connect(("108.108.108.150",7775))
    s.send(data1)


if __name__ == '__main__':
    main()
4

1 回答 1

1

除非您知道每个字节的含义,否则您永远不应该对数据包中的任何“可打印”字符串做出假设。在这种特殊情况下,字节 '.g' 或 0x18 0x67 是 UDP 校验和。AFAIK,它可以以某种方式被禁用。如果您的接收器将收到此数据包,它将在其数据字段中包含 52 56 0a 20 ("RV\n ")。这就是为什么您总是通过稍微更改有效负载和 [也许] udp 源端口来获得“cRV”或“eRV”。

于 2013-07-29T15:04:37.463 回答