Python 3.x Python TCP客户端

Python 3.x Python TCP客户端,python-3.x,sockets,tcp,zeromq,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(B

我已经用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'
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'
输出:

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'
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'
ZMQ:

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'
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'
输出:

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'
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有自己的服务器配置,可以与子客户端交互

其次,套接字服务器的配置错误。您正在将其设置为客户端

如果您想使用zmq,我给您留下一个正确的客户机/服务器示例():

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)
# -*- 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
ZMQclient.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)
# -*- 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
在本例中,服务器每秒向订阅它的所有客户端发送消息

您还可以检查zmq文档中的代码:|

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