无法接收所有数据包

时间:2014-05-25 15:23:10

标签: java networking datagram

为每个人服务。 我正在尝试使用Eclipse(Kepler)创建一个应用程序,在那里我发送一个DatagramPackets数组。我的服务器端应用程序正在接收客户端发送的所有数据包。但是当服务器尝试通过将响应数据包发送回客户端来响应时,我的客户端无法接收所有数据包。 如果有人帮助我,我真的很有责任。

这是我的客户端应用程序代码:

public static void main(String [] args) throws IOException
{
    timing t=new timing(); // timing is the name of my class

    InetAddress inet;
    DatagramSocket ds;

    int k=1024*60;

    DatagramPacket[] p=new DatagramPacket[64];
    DatagramPacket []recd=new DatagramPacket[64];
    byte[] buf=new byte[1024*60]; 

            if(args[0]==null)
    {
        args[0]="localhost";
    }
    inet=InetAddress.getByName(args[0]);
    ds=new DatagramSocket(6443);

    for(int i=0;i>64;i++)
    {
        p[i]=new DatagramPacket(sent.getBytes(),sent.length(),inet,7443);
        recd[i]=new DatagramPacket(buf,buf.length);
    }

    ds.setSoTimeout(120000);
    int buffer=ds.getReceiveBufferSize();
    int j=ds.getSendBufferSize();
    while(h<64)
        {
        p[h]=new DatagramPacket(sent.getBytes(),sent.length(),inet,7443);
        ds.send(p[h]);
        System.out.println("Client has sent packet:"+h);
        h++;
        }
    System.out.println("Receiving.");
    h=0;
    while(h<64)   // UNABLE TO RECEIVE ALL SERVER SIDE PACKETS . PROBLEM CODE
    {
    recd[h]=new DatagramPacket(buf,buf.length);
    ds.receive(recd[h]);
    System.out.println("Client has recd packet:"+h);
    h++;
    }

服务器端应用程序:

尝试{

    byte[] buf=new byte[60*1024];

    InetAddress add=InetAddress.getByName("localhost");
    for(int i=0;i<64;i++)
        dp[i]=new DatagramPacket(buf,buf.length,add,6443);
    ds.setSoTimeout(120000);
    System.out.println("SERVER READY AND LISTENING PORT 6443");
    int h=0;
    while(h<64)
    {
        dp[h]=new DatagramPacket(buf,buf.length,add,6443);
        ds.receive(dp[h]);
        System.out.println("Packet "+h+"recd.");
        h++;
    }


    String x1=new String(dp[63].getData());
    System.out.println("Server recd:"+x1);// correct. no problem here

    InetAddress add2=dp[63].getAddress();
    int port=dp[63].getPort();// this is fine. same data sent in all packets

    h=0;
    while(h<64)
    {
        dp[h]=new DatagramPacket(buf,buf.length,add2,port);
        ds.send(dp[h]);
        System.out.println("Server has sent packet:"+h);
        h++;
    }

请帮助我,因为当我发送一个datagrampacket它被重新录制时。但这个数据包数组不是。

2 个答案:

答案 0 :(得分:1)

我对你的代码了解不多,但如果我真的想要这个&#39; for&#39;循环:

for (int i=0;i>64;i++)

至少执行一次我会将其更改为i<64

答案 1 :(得分:0)

您没有显示客户端中sent的内容,或者显示它有多长,但我怀疑它实际上可以发送一些合理的大小。

相比之下,在服务器中,您尝试发送60k数据报,除非发送方的套接字发送缓冲区和接收方的套接字接收缓冲区至少达到该大小,否则将无法工作。