这是一个常见问题,但我似乎无法做到这一点,这不是由于防火墙,我确保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个赞
仔细查看您正在使用的各种调用,因为您正在滥用它们。DatagramSocket
DatagramPacket
在 Sender 程序中,您正在“构造一个数据报数据包,用于将长度的数据包发送到指定主机上的指定端口号”。然后,您将“创建一个绑定到指定本地地址的数据报套接字”。当您使用相同的端口 和 时,您实际上是将数据包发送到您列出的同一地址。length
InetAddr
在 Receiver 程序中,您“构造[]一个数据报套接字并将其绑定到本地主机上的指定端口。这一次,您将它绑定到与要将其发送到的端口不同的端口。(8888 vs 9850 您要将数据包发送到的位置)。
对于发送方,尝试通过调用 来创建绑定到随机端口的套接字。对于接收方,请更改套接字,使其绑定到发送方尝试将其发送到的相同编号端口(例如 9850)DatagramSocket()
鸿蒙传说
TA贡献1865条经验 获得超7个赞
您不需要使用 while(true),因为 DatagramPacket.receive 方法将阻塞,直到收到数据报。
问题的原因可能是端口从一侧到另一侧不同
添加回答
举报
0/150
提交
取消