java - UDP Java,不返回正确的大小写答案

标签 java udp

我的 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/

相关文章:

java - 在循环内从 mysql 检索最后 n 行

java - 来自内核的 GC 信号而不是固定的 JVM 堆大小

java - 无法在 Java 中创建 LinkedLists 数组...?

java - 将接收数据包与字符串 UDP 协议(protocol)进行比较

java - 安卓/Eclipse : How to create a new project without appcompat_v7

c++ - 客户端无法使用 udp 连接向服务器发送请求

sockets - 同一台 PC 上多个进程的 UDP 广播性能不佳

java - 从 udp 跟踪器中获取没有播种机和水蛭的抓取

java - 发送和接收 UDP 数据包?

java - S3 SDK 能否自行确定存储桶的区域?