2015-04-05 49 views
0

我使用套接字編寫了一個基本的服務器客戶端腳本,並且在我的局域網中一切工作正常,但當我試圖連接到不在我的局域網中的客戶端時,它不起作用。我還端口轉發這些端口Python套接字不在本地網絡上

這是服務器

###SERVER#### 


def ChatConnection(): 
    print('Waiting for a connection...\n') 
    SOCKET = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    SOCKET.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
    HOST = '' 
    PORT = 8989 
    SOCKET.bind((HOST, PORT)) 
    SOCKET.listen(1) 
    CONN, ADDR = SOCKET.accept() 
    print('You can now chat') 
    while True: 
     MSG = str(input('\n[YOU]> ')) 
     while not MSG: MSG = str(input('\n[YOU]> ')) 
     CONN.send(MSG.encode()) 
     print('\nAwaiting reply...') 
     REPLY = CONN.recv(4096).decode() 
CONN.close() 

這是客戶端

###CLIENT### 



def ChatConnection(): 
    print('Waiting for a connection...\n') 
    while True: 
     try: 
      HOST = SERVER EXTERNAL IP 
      PORT = 8989 
      SOCKET = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
      SOCKET.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
      SOCKET.connect((HOST, PORT)) 
      print('You can now chat with server') 
      print('\nWaiting for server...') 
      while True: 
       REPLY = SOCKET.recv(4096) 
       print('\n[USER]> %s'%REPLY.decode()) 
       MSG = str(input('\n[YOU]> ')) 
       while not MSG: MSG = str(input('\n[YOU]> ')) 
       SOCKET.send(MSG.encode()) 
       print('\nAwaiting reply...') 
      SOCKET.close() 
    except Exception: pass 

什麼,我需要做的所以這將在WAN上工作?

+0

你是否已經**雙方**? – hamsolo474 2015-04-06 01:59:48

+0

這是非常重要的。我不能要求有人前進,有很多方法可以在沒有端口前進的情況下聊天。那些在線聊天呢? – PieThon 2015-04-06 14:38:44

回答

0

確保端口轉發WORKS,檢查此運行您的程序並嘗試運行您的公共IP上的端口掃描。
Port scanning tool

  • 嘗試改變HOST0.0.0.0
  • 如果這樣做不起作用,請在腳本運行時寫入CMD並編寫netstat -a
    搜索您正在監聽的端口,並確保IP爲0.0.0.0。如果IP爲0.0.0.0,請嘗試關閉防火牆。