gpt4 book ai didi

python - 与基于 telnet 的服务器的套接字连接在读取时挂起

转载 作者:太空狗 更新时间:2023-10-30 00:57:59 24 4
gpt4 key购买 nike

我正在尝试用 Python 编写一个简单的基于套接字的客户端,它将连接到一个 telnet 服务器。我可以通过 telnet 到它的端口 (5007) 并输入文本来测试服务器。它以 NAK(错误)或 AK(成功)响应,有时还伴有其他文本。看起来很简单。

我写了一个客户端来连接服务器并与之通信,但它在第一次尝试读取响应时挂起。连接成功。像 getsockname 和 getpeername 这样的查询是成功的。发送命令返回一个等于我发送的字符数的值,所以它似乎发送正确。但最后,当我尝试阅读响应时,它总是挂起。

我尝试过使用基于文件的对象,例如 readline 和 write(通过 socket.makefile),以及使用 send 和 recv。对于文件对象,我尝试用“rw”创建它并通过该对象进行读写,后来尝试了一个对象用于“r”,另一个对象用于“w”以将它们分开。这些都不起作用。

我使用数据包嗅探器来观察发生了什么。我并不精通我所看到的一切,但在 telnet session 期间,我可以看到我键入的文本和返回的服务器文本。在我的 Python 套接字连接期间,我可以看到我的文本发送到服务器,但返回的数据包中似乎没有任何文本。

关于我做错了什么的任何想法,或尝试的任何策略?

这是我正在使用的代码(在本例中,它包含发送和接收):

#!/usr/bin/python

host = "localhost"
port = 5007
msg = "HELLO EMC 1 1"
msg2 = "HELLO"

import socket
import sys

try:
skt = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error, e:
print("Error creating socket: %s" % e)
sys.exit(1)

try:
skt.connect((host,port))
except socket.gaierror, e:
print("Address-related error connecting to server: %s" % e)
sys.exit(1)
except socket.error, e:
print("Error connecting to socket: %s" % e)
sys.exit(1)

try:
print(skt.send(msg))
print("SEND: %s" % msg)
except socket.error, e:
print("Error sending data: %s" % e)
sys.exit(1)


while 1:
try:
buf = skt.recv(1024)
print("RECV: %s" % buf)
except socket.error, e:
print("Error receiving data: %s" % e)
sys.exit(1)
if not len(buf):
break
sys.stdout.write(buf)

哦,如果有用的话,下面是一个手动完成的 telnet session 示例:

ubuntu:~/mac/python$ telnet localhost 5007
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
HELLO EMC 1 1
HELLO ACK EMCNETSVR 1.1

第一行“HELLO”是我输入的内容,第二行是响应。

最佳答案

您可能需要用某种“行结束字符”来终止您的 msg -- 也许是 \r\n,也许只是两者之一。当您使用 telnet 时,您是否通过按 Return 或 Enter 键来终止键入的文本?在 Python 代码中,您并没有做同样的事情。

关于python - 与基于 telnet 的服务器的套接字连接在读取时挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2893562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com