你运行程序的时机应该不对,先运行Receive端,再运行Send端的程序。看你的截图代码,你Receive端都没有等待,一运行就结束了,速度很快,根本来不及等待Send端的发送数据过来。
你试试在 ds.receive(dp); 前面插入一行 Thread.sleep(10000);等待10秒,就能收到信息了

解决方案 »

  1.   

    在你代码的基础上稍微多加了一点,可以一直接收和发送消息,直到输入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();
        }
    }
      

  2.   

    你运行程序的时机应该不对,先运行Receive端,再运行Send端的程序。看你的截图代码,你Receive端都没有等待,一运行就结束了,速度很快,根本来不及等待Send端的发送数据过来。
    你试试在 ds.receive(dp); 前面插入一行 Thread.sleep(10000);等待10秒,就能收到信息了谢谢你的回复! 你的代码我试了一下 可以运行成功。 而且我的Udp接收器可以收到你的UdpSender发送的信息,但是我的UdpSend发送的信息在我们两个的接受端都收不到,所以应该是我的发送器代码的问题。可我就是找不出问题在哪
      

  3.   

    我都是在本机上做的测试,你最初的那个sender发送的信息要确保也发送到本机的receiver才行的。
    你的那个截图的代码,把getByName("WG") 改成 getByName("localhost") 就可以了吧。
    我用你最初的那个代码试了,都可以接收到的。
      

  4.   

    你运行程序的时机应该不对,先运行Receive端,再运行Send端的程序。看你的截图代码,你Receive端都没有等待,一运行就结束了,速度很快,根本来不及等待Send端的发送数据过来。
    你试试在 ds.receive(dp); 前面插入一行 Thread.sleep(10000);等待10秒,就能收到信息了谢谢你的回复! 你的代码我试了一下 可以运行成功。 而且我的Udp接收器可以收到你的UdpSender发送的信息,但是我的UdpSend发送的信息在我们两个的接受端都收不到,所以应该是我的发送器代码的问题。可我就是找不出问题在哪我在我的代码 ds.send(dp) 和 ds.close() 之间加了一句 Thread.sleep(1000) 就可以收到了。不加这一句的话就收不到。接收端是一直开着的。 难道不加这一句send和close就是同时执行的吗? 好奇怪的现象。。
      

  5.   

    同时执行肯定不是的,只是时间间隔太短,数据还没发出去就close了
      

  6.   

    这里没涉及多线程,应该不会出现这样的问题吧,都在主线程中一条条的执行。send返回以后,才会执行下面的那条close。楼主,你那边不加Thread.sleep是每次都收不到还是偶尔出现收不到?
      

  7.   

    这里没涉及多线程,应该不会出现这样的问题吧,都在主线程中一条条的执行。send返回以后,才会执行下面的那条close。楼主,你那边不加Thread.sleep是每次都收不到还是偶尔出现收不到?试了好多遍 只要不加sleep就一定收不到
      

  8.   

    这里没涉及多线程,应该不会出现这样的问题吧,都在主线程中一条条的执行。send返回以后,才会执行下面的那条close。楼主,你那边不加Thread.sleep是每次都收不到还是偶尔出现收不到?试了好多遍 只要不加sleep就一定收不到
    代码贴出来(别截图),把你运行的步骤详细说说。你这个情况太奇葩了
      

  9.   

    udp的这种问题 为什么不开wireshark抓包看下呢
    问题无非就是client有没有把包发过来
    再就是发过来后 server有没有收到 
    中间有没有被防火墙过滤掉   如果是linux下 再看看iptables  selinux什么配置的 
    如果单纯只从代码来看这个问题 效率很低下啊