Java 查询OpenTTD服务器

Java 查询OpenTTD服务器,java,udp,packet,Java,Udp,Packet,我正在使用以下java代码尝试发送()数据包来查询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 ne

我正在使用以下java代码尝试发送()数据包来查询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();
但是,当我运行程序时,服务器从不返回任何数据包。我几乎没有处理数据包的经验,并且一直试图通过查看做同样事情的数据包来找出该做什么。希望有人能帮忙。
谢谢

编辑:
我意识到数据包实际上应该包含数据
03 00
,前两个字节包含长度,但我仍然无法使用数据包发送器获得响应。也许我听错端口了?

我知道我做错了什么。这行:
byte[]buf=新字节[]{0}

应该是:
byte[]buf=新字节[]{0x03,0x00,0x00}
(十六进制表示清楚)

问题是前两个字节存储数据的长度
第三个字节是实际请求


此外,需要重置DatagamPacket以允许在旁注上读取3个以上的字节

,因为我对OpenTTD感兴趣,你指的是开放式传输巨头豪华版游戏吗?@ArunRamakrishnan是的,出于版权原因,官方名称为OpenTTD。太棒了!我有原版的,aaaaaages。我听说过OpenTTD,但从未尝试过。谢谢你的链接,我想我现在应该试试。很抱歉,我绕过了你的问题:)我试过了代码,服务器没有回复。我甚至尝试过在一个单独的线程中首先开始监听响应。也许API调用是错误的?我对OpenTTDAPI不太熟悉however@ArunRamakrishnan根据,所有数据包都需要一个0的单位8。然而,我实际上还没有能够让PHP代码正常工作,而且我几乎没有使用PHPAh的经验就是这样,这似乎是可行的。再次感谢您向我介绍OpenTTD,它刚刚开始播放。对原著的美好回忆。