[英]Java UDP file transfer application
我正在嘗試用Java創建一個簡單的UDP文件傳輸應用程序(服務器和客戶端),我幾乎沒有任何經驗,但仍然經歷了一些基礎知識。 我已經設法制作了一個功能性的應用程序,將我的筆記本電腦中選擇的文件發送到我的桌面,但是使用TCP。
基本上,我想要做的是一個應用程序,您可以選擇一個選項來列出服務器上的文件(一個特定的默認文件夾,在本例中為C:\\ Sharefolder),一個上傳文件到服務器的選項,另一個從服務器下載文件的選項。 如何在客戶端的方法中執行此操作?
這是我到目前為止客戶端的代碼,我不知道我是否正朝着正確的方向前進。 我在底部區域仍然有一些舊的TCP程序代碼,所以沒關系。
public class Client {
private final static int PACKETSIZE = 100 ;
public static void upload(String ipadd, String iport, String fname) {
DatagramSocket socket = null ;
try {
InetAddress host = InetAddress.getByName(ipadd);
int port = Integer.parseInt(iport);
socket = new DatagramSocket(port, host) ;
File file = new File("C:\\Sharefolder\\" +fname);
long size = file.length();
if (size > Integer.MAX_VALUE) {
System.out.println("File too big");
}
byte[] bytes = new byte[(int) size];
for(int i=0; i<size; i++) {
//Send file bytes to a byte array?
}
DatagramPacket packet = new DatagramPacket(bytes, bytes.length, host, port ) ;
byte[] bytes = new byte[(int) size];
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream());
int count;
while ((count = bis.read(bytes)) > 0) {
out.write(bytes, 0, count);
}
out.flush();
out.close();
fis.close();
bis.close();
socket.close();
如果有人能指出我可以幫助我檢查我應該在我的代碼上做什么,那將非常感激。 謝謝!
我不明白do this in terms of method in the client
。 在高級別,您將擁有操作定義的方法( listFiles(path)
, uploadFile(localPath, remotePath)
和downloadFile(localPath, remotePath)
)。
問題是UDP不可靠,因此您必須控制數據真正到來。
您需要的一些提示:
1)描述您的內容格式的迷你協議(每個命令命令的消息,如何傳遞參數/數據)等。
2)一旦發送了消息,您需要設置超時並且(如果沒有收到回復)再次發送消息。
3)當您接收/發送文件時,它將是幾個塊(Datagrams最大有效載荷為64K,除非您使用的是IPv6)。 控制訂單,檢查所有訂單是否到達,請求返回未到達的訂單。
4)玩得開心!
它比TCP更復雜,因為你必須控制很多TCP控制的東西,但是可以完成。 既然你沒有提到它們,我會檢查那些給你作業的人的約束(你能使用IPv6嗎?這是通過所需的最大文件大小?)
此編程任務是讓您設計一個簡單的文件傳輸協議,這是一個應用程序層協議。 但不像FTP,你必須使用UDP作為底層傳輸協議。 如果您希望它有點強大,我認為您可能必須解決以下問題:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.