我正在编写一个使用 UDP 的程序,它首先向 Client1 中的用户询问一个数字,然后服务器将该数字转发给另一个 Client2,Client2 接收该数字计算阶乘,然后将其发送回服务器,然后服务器发回以显示结果在客户端1。 到目前为止,这是我的代码
服务器
public class UDPServer {
public static void main(String[] args) throws IOException {
InetAddress inetAddress = InetAddress.getLocalHost();
int port1 = 1111;
DatagramSocket socket1 = new DatagramSocket(port1);
System.out.println("SERVER: Waiting...");
// Receive from CLIENT 1
byte[] receivedByte1 = new byte[1024];
DatagramPacket receivePackage1 = new DatagramPacket(receivedByte1, receivedByte1.length);
socket1.receive(receivePackage1);
String numberS = new String(receivePackage1.getData());
System.out.println("SERVER: Receive from CLIENT1: " + numberS);
// Send to CLIENT 2
DatagramSocket socket2 = new DatagramSocket(2222);
byte[] sendByte2;
sendByte2 = numberS.getBytes();
DatagramPacket sendPackage = new DatagramPacket(sendByte2, sendByte2.length, inetAddress,2222);
socket2.send(sendPackage);
System.out.println("SERVER: Sent to CLIENT2: " + numberS);
// Receive from CLIENT 2
byte[] receivedByte2 = new byte[1024];
DatagramPacket receivePackage2 = new DatagramPacket(receivedByte2, receivedByte2.length);
socket2.receive(receivePackage2);
String result = new String(receivePackage2.getData());
System.out.println("SERVER: Receive from CLIENT2: " + result);
socket1.close();
socket2.close();
}
}
客户 1
public class UDPClient1 {
public static void main(String[] args) throws IOException {
System.out.println("CLIENT1: Introduce a number...");
DatagramSocket socket = new DatagramSocket();
InetAddress inetAddress = InetAddress.getLocalHost();
int port = 1111;
byte[] sendData;
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
String numberS = String.valueOf(number);
sendData = numberS.getBytes();
DatagramPacket sendPackage = new DatagramPacket(sendData, sendData.length,inetAddress, port);
socket.send(sendPackage);
System.out.println("CLIENT1: Sent " + number + " to SERVER...");
socket.close();
}
}
客户 2
public class UDPClient2 {
public static void main(String[] args) throws IOException {
InetAddress inetAddress = InetAddress.getLocalHost();
int port = 2222;
DatagramSocket socket = new DatagramSocket(port);
System.out.println("CLIENT2: Waiting...");
// Receive number from SERVER
byte[] receivedByte = new byte[1024];
DatagramPacket receivePackage = new DatagramPacket(receivedByte, receivedByte.length);
socket.receive(receivePackage);
String numberS = new String(receivePackage.getData());
System.out.println("SERVER: Receive from SERVER: " + numberS);
// Calculate factorial
int number = Integer.parseInt(numberS.trim());
int result = 1;
for (int i = 1; i <= number; i++) {
result = result * i;
}
String resultS = String.valueOf(result);
System.out.println("Result: " + resultS);
// Send number to SERVER
byte[] sendData;
sendData = resultS.getBytes();
DatagramPacket sendPackage = new DatagramPacket(sendData,sendData.length,inetAddress,2222);
socket.send(sendPackage);
System.out.println("CLIENTE2: Sent: " + resultS + " to SERVER...");
socket.close();
}
}
直到现在我只能设法从 CLIENT1 中输入的数字计算 CLIENT2 中数字的阶乘,SERVER 没有收到来自 CLIENT2 的结果。我该如何解决这个问题?