Python套接字 - 停止从UDP数据报中剥离回车符
我有一个用Python写的脚本,它读取一个ASCII文件(基本上是NMEA字符串),然后通过UDP发送这些数据,使用的是基本的socket库。
每秒钟会发送一段NMEA字符串,并且每段前面都有一个头部。服务器期望每段的开头是一个空行(具体来说是\r\n,也就是0d 0a)。我按照这个要求构建我的字符串('\r\n' + 段落内容)。在调试器中查看字符串的值,并把字符串转换成十六进制时,确实是以0d0a开头的。
但是,当我在Wireshark中查看十六进制转储时,发现0d这个字符似乎被去掉了,可能是socket库处理的时候把它去掉了,所以最终的数据包里只有0a。这样本来是没问题的,但服务器是硬编码的,期待的是0d0a。
那么,有没有办法强制socket库保留0d这个十六进制字符呢?在Windows和Linux下运行客户端时,情况都是一样的。
1 个回答
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