我的 UDP Java 程序没有从 Cases 返回正确的句子。 程序应该针对 4 个不同的问题返回 4 个不同的答案。 但我收到的唯一答案是默认答案“找不到答案” 我认为当服务器尝试将“句子”传递给案例方法时存在一些问题 我在代码中遗漏了什么吗?
服务器类
package pac1;
import java.net.*;
import java.io.*;
public class Server {
public static void main(String args[]) throws Exception{
System.out.println("UDP Server: Started");
DatagramSocket serverSocket =new DatagramSocket(9878);
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
while (true){
DatagramPacket receivePacket = new DatagramPacket(receiveData,
receiveData.length);
serverSocket.receive(receivePacket);
String sentence = new String(receivePacket.getData());
System.out.println("UDP Server Received: "+sentence);
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
String out;
out=getAnswer(sentence);
System.out.println(sentence);
sendData= out.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData,
sendData.length, IPAddress, port);
serverSocket.send(sendPacket);
System.out.println("UDP Server Sending to Client: "+out);
}
}
private static String getAnswer(String sentence) {
String out;
switch(sentence) {
case "A" : out = "65";
break;
case "B" : out = "66";
break;
case "C" : out = "67";
break;
case "D" : out = "68";
break;
default: out = "Answer not found";
break;
}
return out;
}
}
客户端类
import java.net.*;
import java.util.Scanner;
import java.io.*;
public class Client {
public static void main(String args[]) throws Exception{
System.out.println("UDP Client: Started");
String url = "rmi:///";
System.out.println("Enter Question: ");
Scanner myinput = new Scanner(System.in);
String sentence = myinput.nextLine();
DatagramSocket clientSocket =new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName("localhost");
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
sendData =sentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData,
sendData.length, IPAddress, 9878);
System.out.println("UDP Client: Sending "+ sentence);
clientSocket.send(sendPacket);
DatagramPacket receivePacket = new DatagramPacket(receiveData,
receiveData.length);
clientSocket.receive(receivePacket);
String modifiedSentence = new String(receivePacket.getData());
System.out.println("UDP Client: Received From Server; "+ modifiedSentence);
clientSocket.close();
}
}
最佳答案
您遇到此问题的原因可能是由于您在服务器类中创建字符串的方式所致。当您将数据包初始化为接收 1024 字节数据,并且发送的数据少于 1024 字节时,数组的其余部分将用零填充。这会导致字符串末尾有空格。此问题最简单的解决方案可能是调用:
sentence.trim();
在服务器端将接收到的数据转换为字符串后。
关于java - UDP Java,不返回正确的大小写答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47580395/