【问题标题】:Python: send data to socket on connectPython:在连接时将数据发送到套接字
【发布时间】:2018-04-20 04:04:50
【问题描述】:

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

nc www.host.com 1234 < inputfile.txt

然后我得到响应并关闭连接。 我尝试编写一个自动调用此服务的 python 脚本。我想直接(而不是从文件)向它发送数据。

我使用 python 脚本和 socket.send() 和 recv() 函数进行了尝试。但是该服务在连接时没有得到任何输入,因此它返回一个错误并关闭。调用 .send 时出现管道损坏错误(导致连接关闭) 我的代码(sn-p):

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 在连接上发送数据(我认为是)

【问题讨论】:

  • 您是否尝试过“编写一个自动调用此服务的 python 脚本”?它奏效了吗?如果没有,它是否产生错误消息?
  • @Robᵩ 我当然试过 ;) 编辑了我的问题
  • 产生了什么错误?你用了什么代码?
  • 是的,有可能……一切都是可能的
  • 尝试使用 connect_ex 并查看它返回的内容,即它是否连接?

标签: python sockets input


【解决方案1】:

我现在的答案(我将其作为答案发布,因为它有效,但我不会接受它,因为它很难看)是使用 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。 (没有代码 sn-p 因为我在 2.7 中编写了脚本)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-28
    • 2011-06-12
    • 2019-11-24
    • 1970-01-01
    • 2011-10-30
    • 2013-11-19
    • 1970-01-01
    • 2012-02-13
    相关资源
    最近更新 更多