Python:在连接时将数据发送到套接字

时间:2018-04-19 16:07:01

标签: python sockets input

我有一个接受输入的(第三方)套接字。我可以从命令行调用它:

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

错误是因为如果没有数据,服务器会立即关闭套接字连接。 。太晚了。

使用python(我认为是)可以在连接上发送数据

1 个答案:

答案 0 :(得分:0)

我现在的答案(我发布这个作为答案,因为它有效,但我不会接受它,因为它很丑陋)是使用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.runsubprocess.check_output。 (没有为此编写代码片段,因为我在2.7中编写了脚本)