【发布时间】:2016-04-05 04:45:48
【问题描述】:
这个问题整晚都让我头疼,我似乎无法弄清楚为什么它不起作用。 所以我正在运行一个客户端/服务器程序,让客户端通过 JOptionPane 输入某个字符串,然后将其发送到服务器。服务器有一个字符串数组,它检查从客户端收到的字符串是否等于数组中的字符串之一。但是,这种比较似乎失败了。如果有人能告诉我为什么会遇到这个问题,我会很高兴。
以下是我的服务器的代码,其中 if 语句在 for 循环中失败,以及数组 (usrs):
String [] usrs = {"Hassan","Jimmy","Bob","Kevin"};
DatagramSocket skt = null;
try {
skt = new DatagramSocket(2002);
byte [] buffer = new byte [1000];
String okay = "OK";
while(true) {
System.out.println("Inside loop");
DatagramPacket request = new DatagramPacket(buffer,buffer.length);
skt.receive(request);
String userName = (new String(request.getData()));
System.out.println(userName);
for (int i=0; i < usrs.length; i++) {
System.out.println(usrs[i]);
//if user exists in list of verified users,we send the RSA encrypted AES Key using that user's public key which we receive from the user
if (userName.equals(usrs[i])) {
System.out.println("Inside If");
byte [] okayMsg = okay.getBytes();
DatagramPacket reply = new DatagramPacket(okayMsg,okayMsg.length,request.getAddress(),request.getPort());
skt.send(reply);
skt.close();
}
}
}
这是我的客户端代码:
try {
skt = new DatagramSocket();
String userName = JOptionPane.showInputDialog(null,"Please enter your username");
byte [] b = userName.getBytes();
InetAddress host = InetAddress.getByName("localhost");
int serverSocket = 2002;
DatagramPacket request = new DatagramPacket(b,b.length,host,serverSocket);
skt.send(request);
byte [] buffer = new byte[1000];
DatagramPacket reply = new DatagramPacket(buffer,buffer.length);
skt.receive(reply);
String replyData = new String(reply.getData());
System.out.println(replyData);
skt.close();
} catch(Exception e) {
e.printStackTrace();
};
这是输出:
Inside loop
Hassan
Hassan
Jimmy
Bob
Kevin
Inside loop
【问题讨论】:
-
你能确保没有尾随空格或其他不可见字符吗?
-
从输出看来,字符串“Hassan”已通过??
-
不,没有!它没有进入“Inside if”块
-
你到底是什么意思?
-
@HassanAli 你能打印接收到的数据的长度,即 request.getLength() 并在这里分享结果
标签: java if-statement server client