我有一个(第三方)套接字,可以接受输入。我可以从命令行调用它:
nc www.host.com 1234 < inputfile.txt
然后我收到响应并且连接关闭。 我尝试编写一个自动调用此服务的 python 脚本。我想直接(不是从文件)向它发送数据。
我尝试使用 python 脚本和 socket.send() 和 recv() 函数。但是该服务在连接上没有输入,因此它返回错误并关闭。调用 .send 时出现管道损坏错误(因为连接已关闭) 我的代码(片段):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send(data)
data = s.recv(256)
错误:
socket.error: [Errno 32] Broken pipe
错误是因为如果没有数据,套接字连接会被服务器立即关闭。 .send 来不及了。
是否可以使用 python 在连接上发送数据(我假设是)
最佳答案
我现在的答案(我将其作为答案发布是因为它有效,但我不会接受它,因为它太丑了)是使用 netcat 并从 python 调用它。 这是有效的,因为它就像在命令行中使用 nc。尽管这种方法非常丑陋:
proc = Popen("nc www.host.com 1234", shell=True, stdin=PIPE, stdout=PIPE)
data, err = proc.communicate(data)
这是针对 Python 2.7 的,对于 Python 3 有 subprocess.run和 subprocess.check_output . (没有代码片段,因为我在 2.7 中编写了脚本)
关于Python:在连接时将数据发送到套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49925595/