2013-08-06 64 views
6

我正在使用套接字庫進行網絡連接的python中的多人遊戲。該遊戲將支持LAN上播放。一名玩家將設置服務器,局域網上的其他玩家將能夠加入遊戲。爲了實現這一點,我需要一個簡單的方法讓玩家發現可用服務器的列表(玩家不應該被期望輸入IP地址!)。我的首選解決方案將只使用python套接字庫(以及可選的標準庫的其他部分)。如何使服務器可發現到局域網客戶端

我所尋找的是客戶端和服務器代碼:

  • 客戶:廣播遊戲的所有計算機監聽局域網

  • 服務器(S)在某一端口上的要求:回覆客戶端的可用性

試圖回答在下面的回答中,漢斯的建議,UDP套接字可用於響應廣播請求f rom客戶端。

服務器:

#UDP server responds to broadcast packets 
#you can have more than one instance of these running 
import socket 
address = ('', 54545) 
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1) 
server_socket.bind(address) 

while True: 
    print "Listening" 
    recv_data, addr = server_socket.recvfrom(2048) 
    print addr,':',recv_data 
    server_socket.sendto("*"+recv_data, addr) 

客戶:

#UDP client broadcasts to server(s) 
import socket 

address = ('<broadcast>', 54545) 
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
client_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) 

data = "Request" 
client_socket.sendto(data, address) 
while True: 
    recv_data, addr = client_socket.recvfrom(2048) 
    print addr,recv_data 

還有沒有其他令人信服的方式來處理這個問題的曝光率?

+1

你應該尋求幫助的代碼不是戰略 - 你也許可以流連聊天室收到這樣的問題回答 – PyNEwbie

回答

3

你可以嘗試一個UDP廣播。你可以例如從客戶端發送廣播。然後服務器應該廣播一個響應及其地址,以便客戶端可以使用常規連接。

看到這裏的一些示例代碼:http://wiki.python.org/moin/UdpCommunication

+0

感謝您的回答。你是否建議在192.168.0.x範圍內迭代(範圍1,256)x並在特定端口上嘗試UDP連接?維基的具體例子假定服務器是本地主機。 – dlm

+0

廣播將發送到範圍內的每個地址,因此不需要迭代。 –

+0

在示例中,您需要讓服務器響應客戶端。這可以通過反轉廣播來完成(讓服務器發送一個響應UDP廣播,讓客戶端打開一個UDP監聽器並等待響應) –

相關問題