我已经做了计划,从客户这里发送一个UDP数据包到服务器发送源代码使用Java发送和接收UDP数据包?
import java.io.IOException;
import java.net.*;
/**
*
* @author hp
*/
public class JavaApplication9 {
/**
* @param args the command line arguments
*/
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 (Exception e){
}
}
我使用Wireshark的程序。 UDP数据包在接收器的WireShark程序中被接收,但Java程序无法识别它,程序只是继续监听端口,什么也没有发生?
确定服务器正在监听的正确的端口? – elias
除非'address'是正确的并且'port'是57,否则这段代码将在第一个receive()调用中被阻塞。 – EJP
不要将IP地址表示为负数。这很荒谬。写出实际的八位字节值并使用强制转换。 – EJP