java - UDP 中数据报包的使用

标签 java if-statement udp datagram

我正在尝试使用Java中的DatagramPacket与服务器和客户端进行通信。

我的目标是:当客户端说:“你好”时,服务器应该回复:“嗨,很高兴认识你”。所以我使用 if 条件来实现这一点。

但是,当输入为“Hello”时,它似乎跳过了 if 条件(我已经使用了调试)。我想知道为什么会发生这种情况?好像也太奇怪了。谁能帮我解决这个问题吗?任何帮助,将不胜感激!谢谢!

代码:

客户:

public static void main(String[] args) {
        System.out.println("This is Server");
        DatagramSocket server = null;
        byte[] container = new byte[1024];
        try {
            server = new DatagramSocket(9998);
        } catch (SocketException e) {
            e.printStackTrace();
        }
        DatagramPacket dPacket = new DatagramPacket(container, container.length);   
        try {
            while(true) {               
                server.receive(dPacket);
                byte[] datas = dPacket.getData();
                String temp = new String(datas);
                if (temp.equals("Hello")) {
                    System.out.println("Hi~!Nice to meet you!");
                }else if (temp.equals("How are you?")) {
                    System.out.println("I am good!");
                }else {
                    System.out.println("Have a good day");
                }
                if (temp.equals("exit")) {
                    break;
                }


            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        server.close();
    }

客户:

public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("This is Client");
        try {
            DatagramSocket client = new DatagramSocket(8888);
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String input = "";
            while(!input.equals("exit")) {
                input = br.readLine();
                byte[] msg = input.getBytes();
                DatagramPacket dPacket = new DatagramPacket(msg, msg.length,new InetSocketAddress("localhost",9998));
                client.send(dPacket);
            }

            client.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

最佳答案

接收数据时请尝试以下操作。

byte[] datas = dPacket.getData();
String temp = new String(datas, 0, dPacket.getLength());

关于java - UDP 中数据报包的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60704265/

相关文章:

java - 尝试使用 OpenCV JAVA 检测图像中的人脸时出错

c# - 简写 c# if 文本字段为空的语句

c++ - 提升 asio 异步 udp 服务器 - 性能不佳

java - Hibernate sql语句中多对多语法错误

java - 如何在 Java Selenium 中使用通配符条目进行搜索

mySQL 从两个连接表中选择子查询中的数据总和

mysql if语句跨Group by语句在同一行

客户端有关recvfrom函数的问题

sockets - 为什么UDP套接字是通过目的IP地址和目的端口来识别的?

java - 跨平台 JAD(Java 反编译器)(或替代方案?)