socket中的socket.recv()在换行符截断输出?

时间:2013-01-30 00:51:50

标签: python sockets networking

底线

  • 该脚本不会打印从socket.recv()到linux终端的所有内容。
  • 如果我在解释器中执行相同的操作,它会将所有数据打印到终端。

(假设我使用本地网关用于ip,23用于端口,因此telnet到我的路由器中)

import socket
q = socket.socket()
q.connect(ip, port)
data = q.recv(1024)
print data

解释器中的输出是四行:

(一些alt-code乱码或第一行的任何内容)
RT v24-sp2 std(c)2012 NewMedia-NET GmbH
发布时间:03/21/12(SVN修订版:18795)
DD-WRT登录:

脚本输出:

(只是第一行的alt-code乱码)

对于为什么会发生这种情况以及如何纠正它的任何建议都将非常感激。

谢谢,

安德鲁

1 个答案:

答案 0 :(得分:1)

当一次一个地慢慢运行命令时,路由器有时间发送它计划发送的所有内容,然后才有机会调用q.recv(1024)

从脚本运行时,命令会快速连续执行。当脚本执行q.recv(1024)时,路由器只能设法发送一些数据,而不是全部数据。

由于您不使用循环返回并尝试读取更多数据,这就是结束,您将不会再接收(或打印)数据。

(顺便说一句,世界上什么是“alt-code gibberish”?你应该得到的是一些二进制数据,它们是telnet协议协商的一部分。)