我做了一個簡單的程序來發送和接收來自SA:MP服務器的數據包,其中包含有關指定服務器的信息。當我使用名爲「Packet Sender」的程序發送數據包時,此功能正常工作,但我的Java程序不想工作。這是我目前使用的代碼:Java DatagramSocket沒有收到數據包
DatagramSocket dataSocket = new DatagramSocket(iPort);
dataSocket.setSoTimeout(iTimeout);
byte[] bytepacket = szPacket.getBytes(Charset.forName("UTF-8"));
byte[] buf = new byte[256];
DatagramPacket recpacket = new DatagramPacket(buf, buf.length);
DatagramPacket packet = new DatagramPacket(bytepacket, bytepacket.length, address, iPort);
packet.setData(bytepacket);
packet.setAddress(address);
packet.setPort(iPort);
dataSocket.connect(address, iPort);
socketConnected = true;
System.out.println("Local port: " + dataSocket.getLocalPort());
System.out.println("Local IP: " + dataSocket.getLocalAddress());
System.out.println("Remote port: " + dataSocket.getPort());
System.out.println("Remote IP: " + dataSocket.getInetAddress());
System.out.println("Recieve Timeout: "+iTimeout+" milliseconds.");
dataSocket.send(packet);
System.out.println("Sent packet: "+ packet.getData());
dataSocket.receive(recpacket);
String recieved = new String(recpacket.getData(), 0, recpacket.getLength());
System.out.println("Recieved packet: "+ recieved);
dataSocket.close();
dataSocket.disconnect();
這是我的調試:
Packet: SAMPÀßµai
Local port: 7777
Local IP: /192.168.0.103
Remote port: 7777
Remote IP: samp.lawlessrp.com/192.223.24.181
Recieve Timeout: 5000 milliseconds.
Sent packet: [[email protected]
java.net.SocketTimeoutException: Receive timed out
at java.net.DualStackPlainDatagramSocketImpl.socketReceiveOrPeekData(Native Method)
at java.net.DualStackPlainDatagramSocketImpl.receive0(Unknown Source)
at java.net.AbstractPlainDatagramSocketImpl.receive(Unknown Source)
at java.net.DatagramSocket.receive(Unknown Source)
at lillyramcharan.blacksirrah239.tracker.main.<init>(main.java:199)
at lillyramcharan.blacksirrah239.tracker.launch.init(launch.java:17)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
在調試「包」是包被轉換成字節之前。由於它是一個無效的ascii字符(表示爲CANCEL),它也缺少一個字符。
這裏是我前面提到的,發送和返回數據包的程序的截圖: http://puu.sh/6gRd5.png
編輯: 我已經試過禁用我的防火牆/允許javaw進程(這是一個applet)通過我的防火牆,以及與端口7777和55056數據包。
任何幫助,將不勝感激! 謝謝
你談論兩個不同的端口,但你的代碼恰好使用一個。你在服務器上發送什麼端口,以及服務器發送回覆的端口是什麼? –
SAMP使用端口7777,這是我發送到/從的端口。 – user1338675