为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕沐林林 2022-08-17 17:32:43
这是一个常见问题,但我似乎无法做到这一点,这不是由于防火墙,我确保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:别介意套接字没有关闭...
查看完整描述

2 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

仔细查看您正在使用的各种调用,因为您正在滥用它们。DatagramSocketDatagramPacket

在 Sender 程序中,您正在“构造一个数据报数据包,用于将长度的数据包发送到指定主机上的指定端口号”。然后,您将“创建一个绑定到指定本地地址的数据报套接字”。当您使用相同的端口 和 时,您实际上是将数据包发送到您列出的同一地址。lengthInetAddr

在 Receiver 程序中,您“构造[]一个数据报套接字并将其绑定到本地主机上的指定端口。这一次,您将它绑定到与要将其发送到的端口不同的端口。(8888 vs 9850 您要将数据包发送到的位置)。

对于发送方,尝试通过调用 来创建绑定到随机端口的套接字。对于接收方,请更改套接字,使其绑定到发送方尝试将其发送到的相同编号端口(例如 9850)DatagramSocket()


查看完整回答
反对 回复 2022-08-17
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

您不需要使用 while(true),因为 DatagramPacket.receive 方法将阻塞,直到收到数据报。

问题的原因可能是端口从一侧到另一侧不同


查看完整回答
反对 回复 2022-08-17
  • 2 回答
  • 0 关注
  • 76 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信