Python 3.x Python TCP客户端
我已经用python创建了一个TCP客户机,希望它能够监听不断向它抛出的数据流。但它在读取10个字节后就挂起了 Python: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
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是最好的选择之一