2014-09-26 48 views
0

我有一个项目需要使用UDP协议来传输文件,但仍然保证TCP协议的功能。这意味着我们有UDP的速度和文件不会丢失。通过UDP传输文件,但guaranti文件没有丢失

我已经有:

服务器:

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

+0

你是指TCP协议而不是“TDP”? – Jared 2014-09-26 07:27:30

+0

我的错误,我的意思是TCP编辑 – 2014-09-26 07:29:22

+1

你不能那样开箱即可。你必须在你自己的udp和ack接收之上实现你自己的协议。介意你还必须自己跟踪订单。 – Fildor 2014-09-26 07:32:01

回答

0

如果你真的想用UDP实现快速可靠的文件传输,你有很大的任务。使用非常小的文件(适合单个IP数据包),可能很容易避免TCP的某些开销(如TCP连接打开和关闭握手)。

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

0

你只是不能。它的设计不是可靠的。

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