我是新的Python和线程,所以请冷漠。我正在尝试在Python中做2人游戏。数据通过tcp/ip协议(客户端 - 服务器架构)发送。在服务器上我有三个线程。一个与一个用户交流,第二个与第二个和第三个线程交流,我得到的是由客户端发送的其他两个线程的数据。这些数据用于检查游戏是否结束。这一切都很好。问题从现在开始。当游戏结束时,我想发送另一个数据给客户端。所以线程3需要向客户端发送数据,但其他两个线程仍在工作,他们仍然与客户端有连接。通常我不知道如何做到这一点。我试图通过队列从第三个线程发送信息给他人,他们应该关闭他们的连接。它的线程类代码:线程和TCP/IP连接问题
class myThread(threading.Thread):
def __init__(self, threadID, name, conn, conn2, kto, wartosc,
wybor,kolejkaZadan,gracz1,gracz2):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.conn = conn
self.conn2 = conn2
self.kto = kto
self.wartosc = wartosc
self.wybor = wybor
self.kolejkaZadan = kolejkaZadan
self.gracz1 = gracz1
self.gracz2 = gracz2
def run(self):
if self.wybor == None:
toClient(self.conn,self.conn2,self.kto,self.wartosc,self.gracz1)
else:
while True:
data,kolejkaZwrotna = self.kolejkaZadan.get() // I receive data from two others threads
time.sleep(10)
dataKolejne,kolejkaZwrotna = self.kolejkaZadan.get() // I receive data from two others threads
if data is dataKolejne: // if end
tworzenieXmla(self.gracz1, self.gracz2)
odczytywanieXmla('itemGracza1',gracz1Otrzymane)
plik = open('Marcin.xml', 'rb')
czyZamknacConnection = True
kolejkaZwrotna.put(czyZamknacConnection) // send data to two others threads
while True:
czescXmla = plik.read(10000)
#self.conn2.send(czescXmla)
而且这是这是由其他两个线程执行我的发送/接收地功能:
def toClient(conn, conn2, kto, wartosc,gracz):
wordsBackup = None
kolejkaZwrotna = queue.Queue()
while True:
data = conn.recv(BUFFER_SIZE)
if not data:
break
if kolejkaZwrotna.get() is True://receive form thread 3
conn2.close()
print('closed')
break
if len(data)>7:
print('WARNING', data)
words = str(data.decode()).split()
#print(words[0], words[1])
if kto==1:
conn2.send(data)
if kto==2:
conn2.send(data)
kolejkaZadan.put(words[2],kolejkaZwrotna) // send to thread 3
xmlTablicaDoZapisu(str(int(words[0])),str(int(words[1])),str(int(words[2])),gracz)
一般不存在错误,我们可以发挥,但只有一个球员在因此我认为每台计算机服务器都不会发送数据。我将不胜感激任何帮助。