2017-07-28 5 views
0

verbinden Das Problem ist das folgende.Kann nicht über Socket mit Python

Ich habe folgenden Server:

import socket 


class Receiver: 

    TCP_IP = '127.0.0.1' 
    TCP_PORT = 2999 
    BUFFER_SIZE = 20 

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    s.bind((TCP_IP, TCP_PORT)) 
    s.listen(1) 

    conn, addr = s.accept() 
    print('Connection address:', addr) 
    while 1: 
     data = conn.recv(BUFFER_SIZE) 
     if not data: break 
     print("received data:", data) 
     conn.send('0x55'.encode()) # echo 
    conn.close() 

und den Kunden:

import socket import logging 

class NvgClient: 
    _instance = None 
    def __init__(self): 
     self.s = socket.socket() 
     self.s.settimeout(3) 
     self.connect() 
     return 

    def __del__(self): 
     try: 
      self.s.close() 
     finally: 
      return 

    @staticmethod 
    def getInstance(): 
     if(NvgClient._instance == None): 
      NvgClient._instance = NvgClient() 
     return NvgClient._instance 

    def connect(self): 
     try: 
      print("****** TRYING_TO_CONNECT_TO_SOCKET ********") 
      self.s.connect(('127.0.0.0', 2999)) 
     except socket.error: 
      self.s.close() 
      self.s = socket.socket() 
      self.s.settimeout(3) 
      self.connect() 
      logging.error("Socket can`t connect! Reconnected.") 
     return 

    def send(self, data: bytearray): 
     try: 
      print("****** TRYING_TO_SEND_DATA ********") 
      self.s.send(data) 
      logging.info(str(data)) 
      rdata = self.s.recv(1024) 
      if(rdata[0] == 0x55 and rdata[1:5] == data[0:4]): 
       logging.info('NVG OK') 
       return True 
      else: 
       logging.info('NVG BAD') 
     except socket.timeout: 
      self.s.close() 
      self.connect() 
     except IndexError: 
      logging.info('Server returns nothing. Reconnecting.') 
      self.s.close() 
      self.s = socket.socket() 
      self.s.settimeout(3) 
      self.connect() 
      return False 

Aber wenn ich versuche, einige Daten zu senden, ist es unmöglich, Server zu verbinden: self.s. verbinden (('127.0.0.0', 2999)). Ich bekomme socket.error.

Gibt es Fehler oder Fehler im Code? Für andere einfache Beispiele oder Telnet funktioniert der Server gut.

+1

Könnten Sie bitte Ihre Frage aktualisieren mit dem genauen und vollständigen Fehler erhalten Sie? –

+0

Auch 'conn.send ('0x55'.encode())' macht nichts Nützliches für Sie. Versuchen Sie 'conn.send (b '\ x55')' –

Antwort

1

Sie müssen den lokalen Host verbinden, das ist:

127.0.0.1 

und nicht

127.0.0.0 

, wie Sie für Ihre Kunden geschrieben (Server ist okay, obwohl)

Verwandte Themen