python-3.x - Python TCP 客户端

标签 python-3.x sockets tcp zeromq

我在 python 中创建了一个 TCP 客户端,希望它能监听不断向它抛出的数据流。但它在读取 10 个字节后挂起。

python :

import socket


TCP_IP = '10.0.0.25'
TCP_PORT = 31031
BUFFER_SIZE = 4096
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))

while 1:
    data = s.recv(BUFFER_SIZE)
    print (data)

输出:

b'\xff\x00\x00\x00\x00\x00\x00\x00\x01\x7f'

ZMQ:

class ZmqClient(object):

      def __init__(self):

          try:
               self.host = '10.0.0.25'
               self.port = 31031
               context = zmq.Context()
               self.socket = context.socket(zmq.SUB)
               self.socket.connect("tcp://{0}:{1}".format(self.host, self.port))
               self.socket.setsockopt_string(zmq.SUBSCRIBE, "")

          except Exception as e:
               logger.exception("CAN'T ESTABLISH CONNECTION WITH ZMQ SERVER : %s" % e)

      def startReceiving(self): 

          while 1:
                SocketData = self.socket.recv(4096)
                print(SocketData)

if __name__ == "__main__":
    z = ZmqClient()
    z.startReceiving()

输出:

b'\x04\x00\x00\x00BSE\x00\x00\x00\x00\x00\x00\x00\x00\x01\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
   b'\x04\x00\x00\x00BSE\x00\x00\x00\x00\x00\x00\x00\x00\x01\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

我想在 Python 中复制 ZMQ 的行为,实际上我正在为 tornado 编写一个 TCP 客户端并发现它有同样的问题,所以能够在简单的 Python 客户端中复制它。

我做错了什么?

最佳答案

你有很多错误。 首先,ZeroMQ 有自己的服务器配置来与 SUB 客户端交互。

其次,你的socket服务器配置有误。您正在将其设置为客户端。

如果你想使用 zmq,我留给你一个正确的客户端/服务器示例(PUB/SUB Pattern):

ZMQserver.py

# -*- coding: utf-8 -*-

import zmq
import time

context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://*:31031")

while True:
    socket.send_string("Hola mundo!")
    time.sleep(1)

ZMQclient.py

# -*- coding: utf-8 -*-

import zmq

host = 'localhost'
port = 31031

#  Socket to talk to server #
context = zmq.Context()
socket = context.socket(zmq.SUB)
print("Receiving messages...")
socket.connect("tcp://{}:{}".format(host, port))
socket.setsockopt_string(zmq.SUBSCRIBE, u'')

while True:
    msg = socket.recv_string()
    print msg

在此示例中,服务器每秒向所有订阅它的客户端发送消息。

You can also check the code in the zmq Doc: server | client

对于你想做的事情,zmq 是最好的选择之一。

关于python-3.x - Python TCP 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49811029/

相关文章:

c++ - 在 C++ 中刷新套接字

c++ - 立即在不同的线程上通过 IP 发送

python - psycopg2 - Postgresql 数据库中的 'Relation does not exist'

python - 提高 pandas 数据框的性能

ios - 如何创建 react native polyfill?

wcf - WCF 是否适合实现旧版网络服务?

networking - 从 tcpdump 中提取信息

java - 如何使用 Android Java 录制直播?

python-3.x - 如何使用正则表达式考虑两端互斥的情况下对字符串进行切片?

python - pickle OrderedDict 的子类