我尝试在不同的端口上运行几个套接字,如下所示:
套接字:
import socket
class Receiver:
TCP_IP = '127.0.0.1' # by default
TCP_PORT = 1999 # by default
BUFFER_SIZE = 1024
def __init__(self, TCP_IP, TCP_PORT):
self.TCP_IP = TCP_IP
self.TCP_PORT = TCP_PORT
def initialize(self):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((self.TCP_IP, self.TCP_PORT))
s.listen(1)
conn, addr = s.accept()
print('Connection address:', addr)
while 1:
data = conn.recv(self.BUFFER_SIZE)
if not data: break
rdata = 'U'.encode() + data
print("received data:", data[1:5])
conn.send(rdata[0:5]) # echo
conn.close()和Runner:
from NVGEmulator.Receiver import Receiver
import threading
class FireStarter:
def starter(self):
nvgEmu1 = Receiver('127.0.0.1', 2999)
print("FIRST INITIALIZED")
nvgEmu1.initialize()
nvgEmu2 = Receiver('127.0.0.1', 2998)
nvgEmu2.initialize()
print("SECOND INITIALIZED")
def starter_second(self):
nvgEmu2 = Receiver('127.0.0.1', 2998)
print("SECOND INITIALIZED")
nvgEmu2.initialize()
if __name__ == '__main__':
print("Receiver has been started")
fs = FireStarter()
thr = threading.Thread(target=fs.starter())
thr.start()
thr.join()
thr2 = threading.Thread(target=fs.starter_second())
thr2.start()当我运行FireStarter时,它只运行socket的第一个实例。我读到有“线程”库,它可以在异步中运行多个进程,但无论如何都没有结果,因为在控制台中我看到“第一次初始化”。如何运行第二个或第三个套接字侦听器?也许有另一种方法可以做到这一点。
发布于 2017-08-08 15:11:33
这段代码有两个问题。
第一个:这里的第二个套接字等待第一个套接字结束,因为它被困在while循环中:
def starter(self):
nvgEmu1 = Receiver('127.0.0.1', 2999)
print("FIRST INITIALIZED")
nvgEmu1.initialize()
nvgEmu2 = Receiver('127.0.0.1', 2998)
nvgEmu2.initialize()
print("SECOND INITIALIZED")第二个是这个连接语句thr.join(),用来强制第二个线程等待第一个线程,避免并行运行它。
我可能会遵循的方法是在接收器类中的initialize函数中派生一个线程,并在那里管理该线程(可能是扩展Thread类),这样就避免了每次自己派生一个新线程,并且代码更加封装。
https://stackoverflow.com/questions/45561253
复制相似问题