簡體   English   中英

Java UDP文件傳輸應用程序

[英]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作為底層傳輸協議。 如果您希望它有點強大,我認為您可能必須解決以下問題:

  • UDP協議是一種不可靠的協議; 它不保證所有數據包都按順序交付和交付。 因此,您必須在應用程序級別實施自己的完整性檢查。 完整性檢查可以是SHA-1。 在發送塊之前,請為此塊指定長度和SHA-1,並將它們包含在協議消息頭中。 因此接收器能夠檢查元信息。 如果不匹配,則發送方必須重新傳輸先前的塊。
  • 關於協議,您可以設計基於文本的協議。 基於文本的協議包含協議狀態行,正文和內容。 每行以“\\ r \\ n”結尾,每個部分以“\\ r \\ n”結尾。 類似於HTTP協議。 狀態行表示您的命令 - 列表,上傳,加載和正文表示序列號,長度,SHA-1等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM