Python中的socket.recv()在换行时截断输出吗?

0 投票
1 回答
3911 浏览
提问于 2025-04-17 14:08

总结

  • 这个脚本没有把socket.recv()接收到的所有内容都打印到Linux终端上。
  • 但如果我在解释器里做同样的事情,它会把所有数据都打印出来。

(假设我用本地网关的IP和23这个端口,目的是通过telnet连接到我的路由器)

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

在解释器中的输出是四行:

(第一行是一些乱码)
RT v24-sp2 标准版 (c) 2012 NewMedia-NET GmbH
发布日期:03/21/12 (SVN修订版:18795)
DD-WRT 登录:

脚本的输出:

(只有第一行的乱码)

如果有人能告诉我为什么会这样,以及如何解决这个问题,我将非常感激。

谢谢,

安德鲁

1 个回答

1

当你慢慢地一个一个运行命令时,路由器有足够的时间把它要发送的所有信息都发送出去,这样你在调用 q.recv(1024) 之前,路由器已经把数据发完了。

但是如果你是通过脚本来运行这些命令,命令就会很快接连执行。当脚本执行 q.recv(1024) 时,路由器可能只发送了一部分数据,并没有把所有的数据都发完。

因为你没有用循环去尝试读取更多的数据,所以就到此为止了,你不会收到(或者打印)更多的数据。

顺便问一下,“alt-code gibberish”到底是什么?你应该得到的是一些二进制数据,这些数据是telnet协议协商的一部分。

撰写回答