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

标签 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

错误是因为如果没有数据,套接字连接会被服务器立即关闭。 .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.runsubprocess.check_output . (没有代码片段,因为我在 2.7 中编写了脚本)

关于Python:在连接时将数据发送到套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49925595/

相关文章:

java - 在 3G 上闪存到 Java 套接字丢失数据包

php - 在数据库中使用输入复选框——第 2 部分

c++ - 我的 C++ 程序中的文件输入有问题

python - PyECC 示例 - Python 椭圆曲线密码学

python - 如何将数据框唯一值与列表进行比较?

python - 可移植设置和应用程序数据存储,用Python?

java - 流写入异常

qt - QT套接字等待用户输入

python - 从 [list] 字典 python 中删除多个值

java - 如何测试这个程序