我的课程设计是编写了一个UDP SOCKET程序,将CLIENT上的一个文件(假设为abc.txt)传给SERVER。要求是可以设置UDP包的大小。abc.txt文件总共是846byte。我用sendPacket.setLength(512);设置成512BYTE的大小,这样理论上2个包就可以传完,但是传送给Server以后,Server也只能收到512byte的内容,剩下的就不见了,也就是说只收到了一个包。请问如何解决这个问题?核心代码贴在下面了。请朋友帮帮忙(能解决这个问题的得50分)
另50分:如何在client端得到单个UDP包的传送时间以及整个文件的传输时间?我需要得到start time, End time以及transfer time.最后得到speed kb/s. 请问有哪种方法可以做到这点?谢谢!//Client.java
    DatagramSocket clientSocket = new DatagramSocket();
    //将文件转化成byte保存
    File filename = new File("C:\\abc.txt");
    FileInputStream fileinputstream = new FileInputStream(filename);
    BufferedInputStream inFromFile = new BufferedInputStream(fileinputstream);
    byte[] sendData = new byte[1024];
    inFromFile.read(sendData);
    //设置UDP SOCKET
    DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverIPAddress, serverPort);    sendPacket.setLength(512);     //我用这个语句来设置包的大小为512BYTE
    clientSocket.send(sendPacket);//Server.java
        while(true){
            DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
            serverSocket.receive(receivePacket);  //接收从client来的数据System.out.println("File Byte:" + receivePacket.getLength() + '\n');//接收到的数据大小String sentenceFromServer = new String(receivePacket.getData());
System.out.println("From Server:" + sentenceFromServer + '\n'); //显示出数据内容

解决方案 »

  1.   

    byte[] buf = new byte[1000]; 
      DatagramSocket ds = new DatagramSocket(12345); //开始监视12345端口
      DatagramPacket pack = new DatagramPacket(buf, buf.length); 
      //创建接收数据报
      while (true) {
        ds.receive(pack); 
        //阻塞,直到收到数据报后将数据装入IP中
        System.out.print(new String(buf)); 
      }
      

  2.   

    DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverIPAddress, serverPort);    sendPacket.setLength(512);     //我用这个语句来设置包的大小为512BYTE
        clientSocket.send(sendPacket); 
    ----------
    你这样发送显然是只发送了一个包,这个包原来数据是1024大的,可是你setLength(512);就截掉了后面的数据。
    要想只发送512,要建立多个packet,每个都是512K
      

  3.   

    to TinyJimmy: 我写的程序就和你的是一样的。没效果:(DatagramSocket serverSocket = new DatagramSocket(serverPort);
    while(true){        
     DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
     serverSocket.receive(receivePacket); }to jFresH_MaN: 具体怎样实现呢?先用循环判断,然后再用setData(buffer,offerset,length)来设置么?在SERVER端如何合并?谢谢