2017-07-28 62 views
0

問題如下。無法通過套接字與Python連接

我有以下服務器:

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() 

而且客戶端:

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 

但是,當我嘗試發送一些數據,這是不可能連接到服務器: self.s.連接(('127.0.0.0',2999))。我得到socket.error。

代碼中是否有錯誤或錯誤?對於其他簡單的例子或telnet,服務器運行良好。

+1

可否請你更新你的問題與你得到確切和完整的錯誤? –

+0

另外,'conn.send('0x55'.encode())'對你沒有任何用處。試試'conn.send(b'\ x55')' –

回答

1

您需要連接到本地主機是:

127.0.0.1 

,而不是

127.0.0.0 

爲你寫你的客戶端(服務器是好的,雖然)