2016-09-29 62 views
0

我想用python和PyGame做一個遊戲,其中兩個玩家通過Wi-Fi在不同的網絡上玩遊戲。我目前有這個代碼(我從視頻中獲得)。與不同網絡的通信

# SERVER 

import socket 

def Main(): 
    host = '127.0.0.1' 
    port = 5000 

    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
    s.bind((host,port)) 


    print("Server Started.") 
    while True: 
     data, addr = s.recvfrom(1024) 
     data = data.decode('utf-8') 
     print("message From: " + str(addr)) 
     print("from connected user: " + data) 
     data = data.upper() 
     print("sending: " + data) 
     s.sendto(data.encode('utf-8'), addr) 
    c.close() 

if __name__ == '__main__': 
    Main() 

# CLIENT 

import socket 

def Main(): 
    host = '127.0.0.1' 
    port = 5001 

    server = ('127.0.0.1',5000) 

    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
    s.bind((host, port)) 

    message = raw_input("-> ") 
    while message != 'q': 
     s.sendto(message.encode('utf-8'), server) 
     data, addr = s.recvfrom(1024) 
     data = data.decode('utf-8') 
     print('Received from server: ' + data) 
     message = raw_input("-> ") 
    s.close() 

if __name__ == '__main__': 
    Main() 

這在同一臺機器上正常工作。我怎麼能在兩臺不同的計算機上(在兩個不同的局域網上)完成這項工作?

+0

您將需要連接到實際的IP地址而不是回送地址。如果兩個網絡可以通信,那麼它應該工作。 –

+0

@RonMaupin,他不需要'端口轉發'嗎? – coder

+0

@coder,這取決於。關於NAT的問題沒有什麼。有許多網絡不使用NAT。 –

回答

0

變化host= '0.0.0.0'(服務器)

這使得它發佈到任何可用的接口...如果你有一個路由器,你(可能)也將需要使用你的路由器的端口轉發設置直接交通到正確的電腦

作爲一邊......這是什麼廢話? server = ('127.0.0.1',5000)

客戶端...只是設置你的網絡的相應端口的面向公衆的IP地址(如果你使用portforwarding)......你canfind這個IP地址@http://whatismyip.com

+0

當我將服務器更改爲公用IP地址時,如果我嘗試發送數據,則不會發生任何反應。如果我在另一個設備(仍在同一網絡上)嘗試同樣的事情,我會得到: socket.error:[Errno 111]連接被拒絕。 –