簡體   English   中英

通過UDP傳輸文件,但保證文件不丟失

[英]transfer file by UDP but guaranti file not lost

我有一個項目要求使用UDP協議來傳輸文件,但仍要保證TCP協議的功能。 這意味着我們擁有UDP的速度並且文件不會丟失。

我已經有:

服務器:

public class UDPServer {    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        // TODO code application logic here 
        int port = 6788;
        DatagramSocket sk = new DatagramSocket(port);
        byte[] buf = new byte[1000];
        while(true){

            DatagramPacket request = new DatagramPacket(buf, buf.length);
            sk.receive(request);

            String msg = (new String(request.getData()));            
            DatagramPacket reply = new DatagramPacket(msg.getBytes(), msg.getBytes().length, request.getAddress(), request.getPort());
            sk.send(reply);
        }
    }
}

客戶:

public class UDPClient {
    public static void main(String[] args) throws SocketException, UnknownHostException, IOException {
        DatagramSocket sk = new DatagramSocket();


        String msg = "message send";
        InetAddress addr = InetAddress.getByName("localhost");
        int port  = 6788;
        DatagramPacket request = new DatagramPacket(msg.getBytes(), msg.getBytes().length, addr, port);
        sk.send(request);

        byte[] buf = new byte[1000];
        DatagramPacket reply = new DatagramPacket(buf, buf.length);
        sk.receive(reply);
        System.out.println("packet da nhan duoi client" + new String(reply.getData()));
        sk.close();
    }
}

您能幫我任何確保文件不丟失的建議嗎? ks

如果您確實想使用UDP實現快速可靠的文件傳輸,則您的任務非常艱巨。

對於非常小的文件(適合單個IP數據包),可以輕松避免TCP的一些開銷(例如TCP連接打開和關閉握手)。

但是,如果要傳輸更大的文件,則必須實現許多困難的功能,例如:流控制,選擇性確認,重新傳輸等。 因此,我建議使用TCP,而不是實現自己的類似協議。

你不能。 它的設計不可靠。

如果您設法做到這一點……這僅意味着您已經自己實現了TCP !,但是它會慢得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM