2014-10-11 112 views
0

我使用下面的Java代碼,試圖發送一個PACKET_UDP_CLIENT_FIND_SERVERsource)數據包來查詢OpenTTD服務器:查詢的OpenTTD服務器

InetAddress address = InetAddress.getByName("publicserver-new.openttdcoop.org"); 
DatagramSocket socket = new DatagramSocket(); 
byte[] buf = new byte[]{0}; // 0 is number for CLIENT_FIND_SERVER, no extra data is needed (?) 
DatagramPacket packet = new DatagramPacket(buf, buf.length, address, 3983); 
socket.send(packet); 

packet = new DatagramPacket(buf, buf.length); 
socket.receive(packet); 
packet.getData(); // 
socket.close(); 

然而,當我運行該程序的服務器永遠不會返回任何數據包。我幾乎沒有使用數據包的經驗,並一直試圖找出PHP and Python source code做同樣的事情要做什麼。希望有人能夠提供幫助。
感謝

編輯: 我意識到,包實際上應該包含數據03 00 00,前兩個字節包含的長度,但我還是一直沒能得到使用分組發送的響應。也許我正在聽錯端口?

+0

在旁註中,因爲我對OpenTTD感興趣,您的意思是Op運輸大亨豪華遊戲? – 2014-10-11 03:57:20

+0

@ArunRamakrishnan是:http://www.openttd.org,由於版權原因,官方名稱是OpenTTD – 2014-10-11 04:00:27

+0

哦,太棒了!我原來是在aaaaaaaages之前。我聽說過OpenTTD,但從未嘗試過。感謝您的鏈接,我想我現在會嘗試。對不起,側重於你的問題雖然:) – 2014-10-11 05:39:40

回答

1

我想清楚我做錯了什麼。這條線:
byte[] buf = new byte[]{0};

應該是:
byte[] buf = new byte[]{0x03, 0x00, 0x00}(十六進制爲清楚起見)

的問題是,前兩個字節存儲數據的長度
第三個字節是實際的請求

此外,DatagamPacket需要重置,以允許讀取多於3個字節

+1

就是這樣,這似乎工作。再次感謝您向我介紹OpenTTD,剛開始播放。原來的美好回憶。 – 2014-10-14 08:19:02