我正在嘗試在Java中創建點對點文件共享網絡。我正在使用UDP連接通過網絡發送數據包。但是我無法通過UDP連接傳輸完整的文件。大多數數據包每次都缺失。如果我以延遲的方式發送數據包,接收機將獲得所有數據包。java中的點對點文件傳輸
這是我發送代碼:
while (fso.hasNextBlock()){
byte[] temp1 =fso.nextBlock();
int size1 = temp1.length;
packet=new DatagramPacket(temp1, size1,ipaddress,port);
socket.send(packet);
// Thread.sleep(100);
}
這是接收器代碼:
FileOutputStream out=new FileOutputStream(file);
byte[] data=new byte[size];
DatagramPacket packet=new DatagramPacket(data, data.length);
int i=0;
while(true){
socket.receive(packet);
out.write(packet.getData());
System.out.println("packet "+i);
i++;
..... // some codes
}
有什麼不對的在我的代碼?
我對對等網絡不熟悉。在文件共享網絡中最好使用TCP或UDP?
這個問題已經回答了一百萬次,例如http://stackoverflow.com/questions/8754489/protocol-recommendation-for-peer-to-peer-file-transfer。請閱讀如何提出問題http://stackoverflow.com/questions/how-to-ask – OldProgrammer
IMO UDP不應該用於發送文件。這是一個更快的協議,但可能會遺漏軟件包。 UDP通常用於流式傳輸音頻或視頻,如果某些軟件包沒有通過轉換,那麼可以使用UDP。 –