通过UDP传输文件但guaranti文件没有丢失

时间:2014-09-26 07:25:22

标签: java sockets udp

我有一个项目要求使用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();
    }
}

你可以帮我保证文件没丢失吗? TKS

2 个答案:

答案 0 :(得分:0)

如果你真的想用UDP实现快速可靠的文件传输,那么你有很大的任务。

对于非常小的文件(适合单个IP数据包),可以很容易地避免TCP的一些开销(如TCP连接打开和关闭握手)。

但是如果你要传输更大的文件,那么你必须实现许多困难的功能,如:流量控制,选择性确认,重传等。 所以我建议使用TCP,而不是实现自己的类似协议。

答案 1 :(得分:0)

你只是CAN' T。它的设计并不可靠。

如果你设法做到了......它只是意味着你自己实现了TCP!但它会慢得多。