Java Datagram Socket本地无法接收UDP数据包问题求助
问题分析与解决方案
嘿,这问题一看就有眉目了!你的UDP发送端和接收端根本没在同一个端口上工作,这才导致接收端一直等着收不到数据~
先帮你拆解下核心问题:
- 你的发送端把数据包发往了端口
9850,但接收端却在监听端口8888,端口不匹配,数据自然送不到接收端手里。 - 另外发送端的
DatagramSocket绑定了9850端口,其实UDP发送端完全不需要固定绑定端口(除非你有特殊业务需求),让系统自动分配临时端口就行,这样还能避免端口占用问题。
修改后的发送端代码
public static void main(String[] args) { Timer timer = new Timer(); try { InetAddress ip = InetAddress.getLocalHost(); // 把目标端口改成和接收端一致的8888 int targetPort = 8888; // 给buffer填点测试内容,方便验证接收效果 byte[] buffer = "Hello UDP!".getBytes(); DatagramPacket packet = new DatagramPacket(buffer, buffer.length, ip, targetPort); try { // 发送端不需要绑定固定端口,用无参构造让系统自动分配临时端口 DatagramSocket socket = new DatagramSocket(); 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; } }
接收端优化代码(保留核心逻辑,新增内容打印)
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: " + new String(packet.getData(), 0, packet.getLength())); } catch (IOException e) { e.printStackTrace(); return; } } } catch(SocketException e) { e.printStackTrace(); return; } }
额外说明
我给代码加了点小优化:发送端填充了测试数据,接收端新增了内容打印,这样你能更直观看到收发效果。既然你已经排除了防火墙和权限问题,修改端口匹配后应该就能正常收发数据了~
内容的提问来源于stack exchange,提问作者Sheed
相关产品推荐
相关产品推荐

