-1

İstemcilerle başa çıkmak için bu kod parçasını kullanıyorum. veriyi düzgün bir şekilde alıyor ancak istemcilere veri göndermek istediğimde hiçbir şey olmuyor.sunucu istemcilere veri göndermiyor

sunucu Veri tamamen müşterilerine göndermek yoluyla gönderenin adresini almak ve conn.send() vasıtasıyla diğer müşterilerine göndermek alınan eğer istiyorum ama bunu yapmak yolu yoktur görünüyor

import socket 
from _thread import * 


class GameServer: 

    def __init__(self): 

     # Game parameters 
     board = [None] * 9 
     turn = 1 

     # TCP parameters specifying 
     self.tcp_ip = socket.gethostname() 
     self.tcp_port = 9999 
     self.buffer_size = 2048 

     self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

     try: 
      self.s.bind((self.tcp_ip, self.tcp_port)) 
     except: 
      print("socket error, Please try again! ") 

     self.s.listen(5) 
     print('Waiting for a connection...') 

    def messaging(self, conn): 

     while True: 
      data = conn.recv(self.buffer_size) 
      if not data: 
       break 

      print("This data from client:", data) 
      conn.send(data) 

    def thread_run(self): 
     while True: 
      conn, addr = self.s.accept() 
      print('connected to: ' + addr[0] + " : " + str(addr[1])) 
      start_new_thread(self.messaging, (conn,)) 


def main(): 
    gameserver = GameServer() 
    gameserver.thread_run() 

if __name__ == '__main__': 
    main() 
' 

'gönder()' yöntemi.

istemci tarafında kod '

def receive_parser(self): 
     global turn 
     rcv_data = self.s.recv(4096) 
     rcv_data.decode() 
     if rcv_data[:2] == 'c2': 
      message = rcv_data[2:] 
      if message[:3] == 'trn': 
       temp = message[3] 
       if temp == 2: 
        turn = -1 
       elif temp ==1: 
        turn = 1 

      elif message[:3] == 'num': 
       self.set_text(message[3]) 

      elif message[:3] == 'txt': 
       self.plainTextEdit_4.appendPlainText('client1: ' + message[3:]) 
     else: 
      print(rcv_data) 
' 

alıcı yöntem parçası herhangi bir veri almaz.

cevap

0

Kodunuzu biraz değiştirdim (python 2.7 olarak) ve conn.send() iyi çalışıyor gibi görünüyor. Ayrıca conn.sendall() deneyebilirsiniz.

Sunucu kodu:

import socket 
from thread import * 


class GameServer: 

    def __init__(self): 

     # Game parameters 
     board = [None] * 9 
     turn = 1 

     # TCP parameters specifying 
     self.tcp_ip = "127.0.0.1"#socket.gethostname() 
     self.tcp_port = 9999 
     self.buffer_size = 2048 

     self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

     try: 
      self.s.bind((self.tcp_ip, self.tcp_port)) 
     except: 
      print("socket error, Please try again! ") 

     self.s.listen(5) 
     print('Waiting for a connection...') 

    def messaging(self, conn): 

     while True: 
      data = conn.recv(self.buffer_size) 
      if not data: 
       break 

      print("This data from client:", data) 
      conn.send(data) 

    def thread_run(self): 
     while True: 
      conn, addr = self.s.accept() 
      print('connected to: ' + addr[0] + " : " + str(addr[1])) 
      start_new_thread(self.messaging, (conn,)) 


def main(): 
    gameserver = GameServer() 
    gameserver.thread_run() 

main() 

Müşteri kodu:

import socket 

s=socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect(("127.0.0.1", 9999)) 

def receive_parser(): 
     #global turn 
    s.sendall("hello world") 
    rcv_data = s.recv(4096) 
     # rcv_data.decode() 
     # if rcv_data[:2] == 'c2': 
     #  message = rcv_data[2:] 
     #  if message[:3] == 'trn': 
     #   temp = message[3] 
     #   if temp == 2: 
     #    turn = -1 
     #   elif temp ==1: 
     #    turn = 1 

     #  elif message[:3] == 'num': 
     #   self.set_text(message[3]) 

     #  elif message[:3] == 'txt': 
     #   self.plainTextEdit_4.appendPlainText('client1: ' + message[3:]) 
     # else: 
    print(rcv_data) 

receive_parser() 
İşte ran kodudur
İlgili konular