Java网络编程udp接收端收不到数据的问题 你运行程序的时机应该不对,先运行Receive端,再运行Send端的程序。看你的截图代码,你Receive端都没有等待,一运行就结束了,速度很快,根本来不及等待Send端的发送数据过来。你试试在 ds.receive(dp); 前面插入一行 Thread.sleep(10000);等待10秒,就能收到信息了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在你代码的基础上稍微多加了一点,可以一直接收和发送消息,直到输入quit停止。先运行接收端,再运行发送端即可。发送端:import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.util.Scanner;public class UdpSender { public static void main(String[] args) throws IOException { DatagramSocket ds = new DatagramSocket(8888); Scanner scanner = new Scanner(System.in); System.out.println("输入要发送的信息:"); while(true){ String msg = scanner.nextLine(); byte[] buf = msg.getBytes(); DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("localhost"), 10000); ds.send(dp); System.out.printf("%s sent!", msg); if("quit".equalsIgnoreCase(msg)) break; } ds.close(); }}接收端:import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;public class UdpReceiver { public static void main(String[] args) throws IOException { DatagramSocket ds = new DatagramSocket(10000); byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf, buf.length); String data = null; while(!"quit".equalsIgnoreCase(data)){ ds.receive(dp); String ip = dp.getAddress().getHostAddress(); data = new String(dp.getData(), 0, dp.getLength()); System.out.println(ip+"::"+data); } System.out.println("byebye"); ds.close(); }} 你运行程序的时机应该不对,先运行Receive端,再运行Send端的程序。看你的截图代码,你Receive端都没有等待,一运行就结束了,速度很快,根本来不及等待Send端的发送数据过来。你试试在 ds.receive(dp); 前面插入一行 Thread.sleep(10000);等待10秒,就能收到信息了谢谢你的回复! 你的代码我试了一下 可以运行成功。 而且我的Udp接收器可以收到你的UdpSender发送的信息,但是我的UdpSend发送的信息在我们两个的接受端都收不到,所以应该是我的发送器代码的问题。可我就是找不出问题在哪 我都是在本机上做的测试,你最初的那个sender发送的信息要确保也发送到本机的receiver才行的。你的那个截图的代码,把getByName("WG") 改成 getByName("localhost") 就可以了吧。我用你最初的那个代码试了,都可以接收到的。 你运行程序的时机应该不对,先运行Receive端,再运行Send端的程序。看你的截图代码,你Receive端都没有等待,一运行就结束了,速度很快,根本来不及等待Send端的发送数据过来。你试试在 ds.receive(dp); 前面插入一行 Thread.sleep(10000);等待10秒,就能收到信息了谢谢你的回复! 你的代码我试了一下 可以运行成功。 而且我的Udp接收器可以收到你的UdpSender发送的信息,但是我的UdpSend发送的信息在我们两个的接受端都收不到,所以应该是我的发送器代码的问题。可我就是找不出问题在哪我在我的代码 ds.send(dp) 和 ds.close() 之间加了一句 Thread.sleep(1000) 就可以收到了。不加这一句的话就收不到。接收端是一直开着的。 难道不加这一句send和close就是同时执行的吗? 好奇怪的现象。。 同时执行肯定不是的,只是时间间隔太短,数据还没发出去就close了 这里没涉及多线程,应该不会出现这样的问题吧,都在主线程中一条条的执行。send返回以后,才会执行下面的那条close。楼主,你那边不加Thread.sleep是每次都收不到还是偶尔出现收不到? 这里没涉及多线程,应该不会出现这样的问题吧,都在主线程中一条条的执行。send返回以后,才会执行下面的那条close。楼主,你那边不加Thread.sleep是每次都收不到还是偶尔出现收不到?试了好多遍 只要不加sleep就一定收不到 这里没涉及多线程,应该不会出现这样的问题吧,都在主线程中一条条的执行。send返回以后,才会执行下面的那条close。楼主,你那边不加Thread.sleep是每次都收不到还是偶尔出现收不到?试了好多遍 只要不加sleep就一定收不到代码贴出来(别截图),把你运行的步骤详细说说。你这个情况太奇葩了 udp的这种问题 为什么不开wireshark抓包看下呢问题无非就是client有没有把包发过来再就是发过来后 server有没有收到 中间有没有被防火墙过滤掉 如果是linux下 再看看iptables selinux什么配置的 如果单纯只从代码来看这个问题 效率很低下啊 各位大神请教一个建立简单聊天室问题,跪求指教!!!! String 数组的长度是13 但遍历出的值全为空 关于Java音频播放器的问题,大家帮忙看看。 内部类问题 怎么查看动态网页 救命啊,java 打印 谁给点java例子啊..? 微软的老大比尔盖茨大学读了两年就退学了,学历也没有拿到。然而仰视今天的全球微软,还需要学历来证明其能力吗?可为什么中国的招聘都要 Jakarta POI 求助!谁有jb源程序,很简单的,就是在一个窗口中调用另一个窗口(要有按钮或菜单),然后在第二个上画图 set,list,map 抽象工厂模式的好处与用处
先运行接收端,再运行发送端即可。发送端:import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;public class UdpSender {
public static void main(String[] args) throws IOException {
DatagramSocket ds = new DatagramSocket(8888);
Scanner scanner = new Scanner(System.in);
System.out.println("输入要发送的信息:");
while(true){
String msg = scanner.nextLine();
byte[] buf = msg.getBytes();
DatagramPacket dp = new DatagramPacket(buf, buf.length,
InetAddress.getByName("localhost"), 10000);
ds.send(dp);
System.out.printf("%s sent!", msg);
if("quit".equalsIgnoreCase(msg))
break;
}
ds.close();
}
}接收端:import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;public class UdpReceiver { public static void main(String[] args) throws IOException {
DatagramSocket ds = new DatagramSocket(10000);
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
String data = null;
while(!"quit".equalsIgnoreCase(data)){
ds.receive(dp);
String ip = dp.getAddress().getHostAddress();
data = new String(dp.getData(), 0, dp.getLength());
System.out.println(ip+"::"+data);
}
System.out.println("byebye");
ds.close();
}
}
你试试在 ds.receive(dp); 前面插入一行 Thread.sleep(10000);等待10秒,就能收到信息了谢谢你的回复! 你的代码我试了一下 可以运行成功。 而且我的Udp接收器可以收到你的UdpSender发送的信息,但是我的UdpSend发送的信息在我们两个的接受端都收不到,所以应该是我的发送器代码的问题。可我就是找不出问题在哪
你的那个截图的代码,把getByName("WG") 改成 getByName("localhost") 就可以了吧。
我用你最初的那个代码试了,都可以接收到的。
你试试在 ds.receive(dp); 前面插入一行 Thread.sleep(10000);等待10秒,就能收到信息了谢谢你的回复! 你的代码我试了一下 可以运行成功。 而且我的Udp接收器可以收到你的UdpSender发送的信息,但是我的UdpSend发送的信息在我们两个的接受端都收不到,所以应该是我的发送器代码的问题。可我就是找不出问题在哪我在我的代码 ds.send(dp) 和 ds.close() 之间加了一句 Thread.sleep(1000) 就可以收到了。不加这一句的话就收不到。接收端是一直开着的。 难道不加这一句send和close就是同时执行的吗? 好奇怪的现象。。
代码贴出来(别截图),把你运行的步骤详细说说。你这个情况太奇葩了
问题无非就是client有没有把包发过来
再就是发过来后 server有没有收到
中间有没有被防火墙过滤掉 如果是linux下 再看看iptables selinux什么配置的
如果单纯只从代码来看这个问题 效率很低下啊