Python套接字 - 停止从UDP数据报中删除回车

时间:2011-12-19 23:27:08

标签: python sockets

我有一个Python脚本正在读取ASCII文件(基本上是NMEA字符串),然后使用基本套接字库通过UDP广播它们。

NMEA字符串的“段落”每隔一秒发送一个标题。服务器期望每个段落以空行开头(特别是\ r \ n,即0d 0a)。我正确地构建了我的字符串('\ r \ n'+段落)。查看调试器中的字符串值并将字符串转换为十六进制,它正确地以0d0a为前缀。

然而,当我在Wireshark中检查十六进制转储时,似乎0d被剥离,可能是由套接字库,所以最终的数据报只有0a。当然,这应该没问题,除了服务器硬编码为期望0d0a。

那么,有没有办法强制套接字库保留0d十六进制字符?当我在Windows和Linux下运行客户端时,会发生同样的事情。

1 个答案:

答案 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