未收到 java 数据报套接字(本地主机)

这是一个常见问题,但我似乎无法做到这一点,这不是由于防火墙,我确保Intellij已获得授权。


UDP 发送器:


public static void main(String[] args){

    Timer timer = new Timer();

    try {

        InetAddress ip = InetAddress.getLocalHost();

        int port = 9850;

        byte[] buffer = new byte[100];

        DatagramPacket packet = new DatagramPacket(buffer, 100, ip, port);


        try {

            DatagramSocket socket = new DatagramSocket(port, ip);

            timer.schedule(new TimerTask() {

                               @Override

                               public void run() {

                                   System.out.println("will send !");

                                   try {

                                       socket.send(packet);

                                   }catch (IOException e){

                                       e.printStackTrace();

                                       return;

                                   }

                                   System.out.println("was sent !");

                               }

                           },500, 500);

        } catch (SocketException e) {

            e.printStackTrace();

            return;

        }

    }catch (UnknownHostException e){

        e.printStackTrace();

        return;

    }

}

UDP 接收器


    public static void main(String[] args) {

    int port = 8888;

    byte[] buffer = new byte[100];

    DatagramPacket packet = new DatagramPacket(buffer, 100);


    try {

        DatagramSocket socket = new DatagramSocket(port);


        while(true) {

            try {

                System.out.println("ready to receive");

                socket.receive(packet);

                System.out.println("received a packet");

            }catch (IOException e){

                e.printStackTrace();

                return;

            }

        }

    }catch(SocketException e){

        e.printStackTrace();

        return;

    }

}

发送数据包,发送方确实显示“将发送/已发送”,但接收方未收到任何内容,它被阻止并且仅显示“准备接收”


ps:别介意套接字没有关闭...


慕沐林林
浏览 98回答 2
2回答

狐的传说

仔细查看您正在使用的各种调用,因为您正在滥用它们。DatagramSocketDatagramPacket在 Sender 程序中,您正在“构造一个数据报数据包,用于将长度的数据包发送到指定主机上的指定端口号”。然后,您将“创建一个绑定到指定本地地址的数据报套接字”。当您使用相同的端口 和 时,您实际上是将数据包发送到您列出的同一地址。lengthInetAddr在 Receiver 程序中,您“构造[]一个数据报套接字并将其绑定到本地主机上的指定端口。这一次,您将它绑定到与要将其发送到的端口不同的端口。(8888 vs 9850 您要将数据包发送到的位置)。对于发送方,尝试通过调用 来创建绑定到随机端口的套接字。对于接收方,请更改套接字,使其绑定到发送方尝试将其发送到的相同编号端口(例如 9850)DatagramSocket()

鸿蒙传说

您不需要使用 while(true),因为 DatagramPacket.receive 方法将阻塞,直到收到数据报。问题的原因可能是端口从一侧到另一侧不同
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java