程序大概如下:     
byte[] udppack_buf=new byte[34567];
byte[] temBuf = new byte[34567];
socket_udp=new DatagramSocket(udp_port);
DatagramPacket udp_packet=new DatagramPacket(udppack_buf,udppack_buf.length);
try{
     for(int i=0;i<10;i++){
             System.out.println("i= "+i);
     socket_udp.receive(udp_packet);
                temBuf=udp_packet.getData();当发送端C语言发送了比如10个数据包之后,在本机用sniffer监控发现本机的网卡确实收到了10个udp的包
,但是这个程序确只能接收到9个数据包,等到第10个的时候就发生阻塞,等待接收第10个数据包
如果这个时候发送端发送20个数据包,也是在第10个的时候出现问题,请高手指教!

解决方案 »

  1.   

    DatagramPacket udp_packet=new DatagramPacket(udppack_buf,udppack_buf.length);
    如何清空这个udppack_buf?
      

  2.   

    做了个例子,没有你说的阻塞的情况。
    请参考。
    //s.java
    import java.net.*;
    public class s
    {
    public static void main(String arg[]) throws Exception
    {
    String hw = "Hello World!";
    byte[] udppack_buf=hw.getBytes("8859_1");
    DatagramSocket socket_udp;
    socket_udp=new DatagramSocket();
    socket_udp.connect(InetAddress.getByName("localhost"),5555);
    DatagramPacket udp_packet=new DatagramPacket(udppack_buf,udppack_buf.length);
    try
    {
         for(int i=0;i<20;i++)
         {
                 System.out.println("i= "+i);
         socket_udp.send(udp_packet);
                    }
            }catch(Exception e)
            {
             System.out.println(e);
            }
        }}
    class r
    {
    public static void main(String arg[]) throws Exception
    {
    byte[] udppack_buf=new byte[34567];
    byte[] temBuf;
    DatagramSocket socket_udp;
    socket_udp=new DatagramSocket(5555);
    DatagramPacket udp_packet=new DatagramPacket(udppack_buf,udppack_buf.length);
    try
    {
         for(int i=0;i<10;i++)
         {
                 System.out.print("i= "+i+":");
                 for(int j=0;j<34567;j++)
                  udppack_buf[i] = 0;
         socket_udp.receive(udp_packet);
                     temBuf=udp_packet.getData();
                 System.out.print(temBuf.length);
                 for(int j=0;j<34567;j++)
                  if(temBuf[j] == 0)
                  {
                     System.out.println(new String(temBuf,0,j));
                     break;
                    }
                    }
            }catch(Exception e)
            {
             System.out.println(e);
            }
        }
    }
      

  3.   

    //运行java s的结果
    C:\Documents and Settings\Administrator\My Documents>java s
    i= 0
    i= 1
    i= 2
    i= 3
    i= 4
    i= 5
    i= 6
    i= 7
    i= 8
    i= 9
    i= 10
    i= 11
    i= 12
    i= 13
    i= 14
    i= 15
    i= 16
    i= 17
    i= 18
    i= 19
    //运行java r的结果
    i= 0:34567Hello World!
    i= 1:34567Hello World!
    i= 2:34567Hello World!
    i= 3:34567Hello World!
    i= 4:34567Hello World!
    i= 5:34567Hello World!
    i= 6:34567Hello World!
    i= 7:34567Hello World!
    i= 8:34567Hello World!
    i= 9:34567Hello World!