我有一个项目需要使用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
如果您真的想用UDP实现快速可靠的文件传输,那么您将面临相当大的任务。
对于非常小的文件(可以放在一个IP数据包中),可以很容易地避免TCP的一些开销(比如TCP连接打开和关闭握手)。
但是,如果你要传输更大的文件,那么你必须实现许多困难的功能,比如:流控制、选择性确认、重新传输等等。所以我建议使用TCP,而不是实现自己类似的协议。
你就是不能。它的设计并不可靠。
如果你成功地做到了……这只意味着你自己已经实现了TCP!,不过速度会慢很多。