我有一个Python脚本正在读取ASCII文件(基本上是NMEA字符串),然后使用基本套接字库通过UDP广播它们。
NMEA字符串的“段落”每隔一秒发送一个标题。服务器期望每个段落以空行开头(特别是\ r \ n,即0d 0a)。我正确地构建了我的字符串('\ r \ n'+段落)。查看调试器中的字符串值并将字符串转换为十六进制,它正确地以0d0a为前缀。
然而,当我在Wireshark中检查十六进制转储时,似乎0d被剥离,可能是由套接字库,所以最终的数据报只有0a。当然,这应该没问题,除了服务器硬编码为期望0d0a。
那么,有没有办法强制套接字库保留0d十六进制字符?当我在Windows和Linux下运行客户端时,会发生同样的事情。
答案 0 :(得分:2)
您需要使用实际代码编辑原始帖子,以便我们可以处理可能出错的问题。
这是关于Python 2.6的简短演示,它没有神奇的换行符:
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
>>> s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
>>> s.sendto('\r\nSOME TEXT HERE', ('127.0.0.1',9999))
在另一个终端:
$ nc -ul 9999 | od -c
0000000 \r \n S O M E T E X T H E R E