【发布时间】:2014-04-12 07:15:16
【问题描述】:
我正在使用 telnet 连接到设备。连接后,我需要输入用户名admin,按回车\n 并使用空白密码(再次输入\n)。在描述的登录过程之后,我应该会收到(prompt) # 的邀请。每次写入后我都从套接字读取。程序如下:
import socket
s = socket.socket()
#Connecting using telnet
s.connect(('192.168.1.2',23))
a = s.recv(1000)
print 'a:', a
s.send('admin\n\n')
b = s.recv(1000)
print 'b:', b
c = s.recv(1000)
print 'c:', c
程序的输出如下:
a: ��
b: �������� ��!��"��'����#��User:
c: admin
Password:
(prompt) #
问题:
为什么我需要双读才能接收所有信息(print b 和 print c)而不是单读(print b)?
【问题讨论】:
-
recv()接收最多指定的字节数。您需要在 while 循环中读取,直到收到所需的字节。 -
print b和print c不是双重阅读。它正在写入标准输出。要接收不同的线路,请尝试在 recv 调用之间使用sleep调用。 -
我之所以这么称呼它是因为它们代表了我通过
b = s.recv(1000)和c = s.recv(1000)获得的信息 -
你的socket是阻塞的还是非阻塞的?
-
我相信它在 Python 中默认是阻塞的,不是吗?