繁体   English   中英

UDP接收数据

[英]UDP receive data

我正在使用 IntelliJ Idea 在 Mac 中编写有关 UDP 的编程。我尝试从客户端读取数据并打印服务器接收的数据。这是代码。

Server

public class UDPServer {
    public static void main(String[] args) throws IOException {

        DatagramSocket datagramSocket = new DatagramSocket(11111);
        byte[] b = new byte[1024];
        DatagramPacket datagramPacket = new DatagramPacket(b,1024);

        while (true){
            datagramSocket.receive(datagramPacket);

            byte[] data = datagramPacket.getData();
            InetAddress address = datagramPacket.getAddress();
            String ip = address.getHostAddress();
            String string = new String(data,0,data.length);
            System.out.println("IP is "+ip+" "+string);
        }
    } }

Client

public class UDPClient {
    public static void main(String[] args) throws IOException {
        DatagramSocket datagramSocket = new DatagramSocket();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));

        String dataString;
        while((dataString = bufferedReader.readLine())!=null){
            if(dataString.equals("886")){
                System.out.println("UDPClient exit");
                break;
            }
            DatagramPacket datagramPacket = new DatagramPacket(dataString.getBytes(),dataString.getBytes().length, InetAddress.getByName("192.168.3.2"),11111);

            datagramSocket.send(datagramPacket);

        }

        datagramSocket.close();
    }

}

我先运行Server ,然后启动Client ,并输入一些东西。这是输入和打印。

input

123456

abcdef

你好

print

IP 是 192.168.3.2 123456

IP是192.168.3.2 abcdef

IP 是 192.168.3.2 hellof

1.第三个打印有另一个'f'

2.每次打印的最后都有很多小方块(我没有足够的声誉来插入图片,抱歉)

问题出在服务器代码中:

String string = new String(data,0,data.length);

您正在根据数据缓冲区的整个大小构造一个 String,而不是接收到的字节数。 因此,如果数据包比上一个小,则该数据包中的任何其他字节仍在缓冲区中。

您需要调用datagramPacket.getLength()来获取该值:

String string = new String(data,0,datagramPacket.getLength());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM