【发布时间】:2012-05-20 08:57:16
【问题描述】:
我编写了一个程序来从客户端向服务器发送 UDP 数据包。
这里是发射器代码:
import java.io.IOException;
import java.net.*;
public class JavaApplication9 {
public static void main(String[] args) throws UnknownHostException, SocketException, IOException {
// TODO code application logic here
byte[] buffer = {10,23,12,31,43,32,24};
byte [] IP = {-64,-88,1,106};
InetAddress address = InetAddress.getByAddress(IP);
DatagramPacket packet = new DatagramPacket(
buffer, buffer.length, address, 57
);
DatagramSocket datagramSocket = new DatagramSocket();
datagramSocket.send(packet);
System.out.println(InetAddress.getLocalHost().getHostAddress());
}
}
接收码函数是这样的:
public void run() {
try {
DatagramSocket serverSocket = new DatagramSocket(port);
byte[] receiveData = new byte[8];
byte[] sendData = new byte[8];
while (true) {
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
String sentence = new String( receivePacket.getData());
System.out.println("RECEIVED: " + sentence);
InetAddress IPAddress = receivePacket.getAddress();
String sendString = "polo";
sendData = sendString.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
serverSocket.send(sendPacket);
}
} catch (IOException e) {
e.printStackTrace();
}
}
我使用过 Wireshark 程序。 UDP 数据包在接收端的 Wireshark 程序中被接收到,但 Java 程序无法识别它,程序只是一直在监听端口,没有任何反应?
【问题讨论】:
-
你确定服务器正在监听正确的端口吗?
-
除非
address正确且port为57,否则此代码将在第一个receive()调用中阻塞。 -
不要将 IP 地址表示为负数。这太荒谬了。编写实际的八位字节值并使用强制转换。