python - 通过网络发送字符串

标签 python sockets

这是一个简单的问题,令我惊讶的是我还没有遇到过类似的问题。

我希望两个进程使用 send() 和 receive() 函数相互发送字符串(消息)。这是一个基本示例:

# Process 1
# ... deal with sockets, connect to process 2 ...
msg = 'An arbitrarily long string\nMaybe with line breaks'
conn.send(msg)
msg = conn.receive()
if process1(msg):
    conn.send('ok')
else:
    conn.send('nok')

# Process 2
# ... deal with sockets, connect to process 1 ...
msg = conn.receive()
conn.send(process2(msg))
msg = conn.receive()
if msg == 'ok':
    print('Success')
elif msg == 'nok':
    print('Failure')
else:
    print('Protocol error')

我知道使用裸流套接字相当容易,但这仍然很麻烦并且容易出错(在循环内执行几个 conn.recv() 并检查大小,例如 HTTP 或流结束标记,如 SMTP 等)。

顺便说一句,它不一定需要使用套接字,只要任何大小的消息都可以通过网络可靠、高效地传输即可。

我做错了什么吗?难道没有一个简单的库(Twisted AMP 看起来不简单)可以做到这一点吗?我已经在互联网上搜索了几个小时但没有成功:)

最佳答案

您可以使用ZeroMQ ,有一个优秀的 Python 绑定(bind),名为 pyzmq 。 它是一个用于编写各种分布式软件的库,基于 消息队列的概念。 该项目最近得到了很多炒作,你会发现很多例子和 网络教程。

关于python - 通过网络发送字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19082703/

相关文章:

python - 与内置函数命名冲突

python - GPSD 未响应新连接

Java 为新连接重新打开 ServerSocket

java - 选择器最多可以选择多少个 channel ?

python - OpenCV导入错误

python - 时间序列数据的滑动窗口训练/测试分割

linux - 套接字绑定(bind)在一个端口上,但 netstat 和 lsof 等工具显示它在其他端口上监听

c# - 具有多个客户端的 TCP 服务器

python - 如何修剪 .fits 图像并保持世界坐标以便在 astropy Python 中绘图?

python - 搜索并替换: convert square brackets to xml tags