这是个简单的UDP socket程序。client端发送了50个包给server端,但是我的server端只接受到了9个包!!请朋友们帮我看看这程序,为什么会出现这样的情况,以及其解决方案~ 急~谢谢!:)
client: UDPC.java
Server: UDPS.java//UDPC.java 
import java.io.*;
  import java.net.*;
  import java.util.Date;
  
  public class UDPC {
   public static void main(String [] args) throws Exception {
  
   byte[] ip={(byte)127,(byte)0,(byte)0,(byte)1};
   InetAddress serverIPAddress = InetAddress.getByAddress(ip); 
   int serverPort = 9876; 
   int i = 0;
   DatagramSocket clientSocket = new DatagramSocket(); 
   byte sendData[]=new byte[1024];
  
   for(int a=0; a<50; a=a+1){ DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverIPAddress, serverPort); 
   clientSocket.send(sendPacket); 
   i = i + 1;
   } //发送50个包
   System.out.print( i + " packets have been sent to Server" + ‘\n‘); //打印发送了i个包,即50个包
   clientSocket.close();
   }
   } 
//UDPS.java 
import java.io.*;
  import java.net.*;
  import java.util.Date;
  
  public class UDPS {
  
   public static void main(String[] args) throws Exception{
   int serverPort = 9876; 
   DatagramSocket serverSocket = new DatagramSocket(serverPort); 
   int j = 0;
   byte[] receiveData = new byte[1024]; DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
  
   while(true){
   serverSocket.receive(receivePacket); 
   j++;
   System.out.println(j + " packets have been received from Client" + ‘\n‘); //打印出接受到了j个包
   }
   }
  }

解决方案 »

  1.   

    UDP是一种不可靠的网络协议,无状态的,出现丢包现象也很正常
      

  2.   

    UDP是一种不可靠的网络协议,无状态的,出现丢包现象也很正常,但你丢的很夸张的原因可能是你发的太快的问题,试着在发送前加一个线程睡眠,或许这样可以丢的不是很夸张。
    //UDPC.java 
    import java.io.*;
      import java.net.*;
      import java.util.Date;
      
      public class UDPC {
       public static void main(String [] args) throws Exception {
      
       byte[] ip={(byte)127,(byte)0,(byte)0,(byte)1};
       InetAddress serverIPAddress = InetAddress.getByAddress(ip); 
       int serverPort = 9876; 
       int i = 0;
       DatagramSocket clientSocket = new DatagramSocket(); 
       byte sendData[]=new byte[1024];
      
       for(int a=0; a<50; a=a+1){ DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverIPAddress, serverPort); 
        // 隔一秒一次
        try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    System.err.println(e);
    }
       clientSocket.send(sendPacket); 
       i = i + 1;
       } //发送50个包
       System.out.print( i + " packets have been sent to Server" + ‘\n‘); //打印发送了i个包,即50个包
       clientSocket.close();
       }
       }
      

  3.   

    UDP就是为了防止丢包,所以多次发送!接受方反映不过来巴!