[英]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.