我的代码:当客户端发送消息数到2000条时,服务端接受数据会丢包,请问这个程序哪里有问题,或者有哪些好的解决办法,很急,谢谢!!
import java.lang.Thread;
import java.net.*;
import java.io.*;
public class UDPClient extends Thread {
private DatagramSocket s;
private InetAddress hostAddress;
private byte[] buf=new byte[10240];
private DatagramPacket dp=new DatagramPacket(buf,buf.length);
private int id; public UDPClient(int identifier){
id=identifier;
try{
s=new DatagramSocket();
hostAddress=InetAddress.getByName("localhost");
}catch(UnknownHostException e){
System.err.println("Cannot find host");
System.exit(1);
}catch(SocketException e){
System.err.println("Can't open Socket");
e.printStackTrace();
System.exit(1);
}
} public void run(){
try{
for(int i=0;i<1000;i++){//消息数
String outMessage="Client # " + id + ", message# " + i;
System.out.println("outMessage is " + outMessage);
s.send(Dgram.toDatagram(outMessage,hostAddress,UDPServer.INPORT));
/*
s.receive(dp);
String rcvd="rcvd is Client #"+id+",rcvd from "+
dp.getAddress()+","+
dp.getPort()+":"+
Dgram.toString(dp);
System.out.println(rcvd);*/
}
System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
s.receive(dp);
}catch(IOException e){
e.printStackTrace();
System.exit(1);
}
} public static void main(String[] args){
for (int i=0;i<1;i++)//客户数量
new UDPClient(i).start();
}
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.sql.Date;import com.utilities.OracleConnection;public class UDPServer {
   static final int INPORT=1711;
   private byte[] buf=new byte[10240];
   private DatagramPacket dp=new DatagramPacket(buf,buf.length);
   private DatagramSocket socket;    public UDPServer(){
   try{
       socket = new DatagramSocket(INPORT);
       System.out.println("hhj Server started!");
       while(true){
        socket.receive(dp);
        String rcvd=Dgram.toString(dp)+", from ddress:"+dp.getAddress()+
                   ",port:"+dp.getPort();
        //String sql = "insert into message (content,address,port) values ('"
   //  +Dgram.toString(dp)+"','"+dp.getAddress()+"','"+dp.getPort()+"')";
        System.out.println("rcvd is " + rcvd);
        //String echoString="  Echoed: "+rcvd;
        //DatagramPacket echo=Dgram.toDatagram(echoString,dp.getAddress(),dp.getPort());
        //socket.send(echo);
       }
   }
   catch(SocketException e){
   System.err.println("Can't open socket");
       System.exit(1);
   }
   catch(IOException e){
   System.err.println("Communication error!");
       e.printStackTrace();
   }
   }
   
   public static void main(String[] args){
   /*
   OracleConnection oc = new OracleConnection();
   if(!oc.connected){
   try {
oc.open();
} catch (Exception e) {
e.printStackTrace();
}
   }*/
   new UDPServer();
   }
   
   /*
   public UDPServer(){
     try{
       socket=new DatagramSocket(INPORT);
       System.out.println("hhj Server started!");
       while(true){
         socket.receive(dp);
         String rcvd=Dgram.toString(dp)+", from ddress:"+dp.getAddress()+
                     ",port:"+dp.getPort();
         System.out.println(rcvd);
         String echoString="Echoed:"+rcvd;
         DatagramPacket echo=Dgram.toDatagram(echoString,dp.getAddress(),dp.getPort());
         socket.send(echo);
      }
     }catch(SocketException e){
         System.err.println("Can't open socket");
         System.exit(1);
       }catch(IOException e){
         System.err.println("Communication error!");
         e.printStackTrace();        }
     }
     */}
// Dgram.java 数据报格式
import java.net.*; public class Dgram {
public static DatagramPacket toDatagram(
String s,InetAddress destIA,int destPort){
byte[] buf=new byte[s.length()+1];
s.getBytes(0,s.length(),buf,0);
return new DatagramPacket(buf,buf.length,destIA,destPort);
}

public static String toString(DatagramPacket p){
return new String(p.getData(),0,p.getLength());
}
}