2012-04-12 71 views
0

我正在嘗試使用Java編寫應用程序,該應用程序將允許我在服務器和請求該文件的客戶端之間傳輸文件。我打算用插座來做。我的算法有點像這樣:客戶端服務器文件傳輸Java

在服務器上: 在客戶端和服務器之間創建連接。 一旦連接找到你需要發送給客戶端的文件。 然後發送文件的大小到客戶端。 然後發送部分分解的文件。

在客戶端 連接創建後,詢問文件。 接收文件大小,然後接受數據,直到達到文件大小。 停止。

請糾正我,如果我錯了某處算法

回答

2

這不是一個真正的「算法」問題;你正在設計一個(簡單)協議。您所描述的內容聽起來很合理,但實施過於模糊。你需要更具體。例如,你需要決定的一些東西:

  • 接收程序如何知道它應該保存到什麼文件名?應該通過套接字發送,還是隻需要詢問用戶?
  • 如何傳輸文件大小?
    • 它是一個字符串嗎?如果是這樣,它的長度如何表示? (帶空終止符?換行符?)
    • 它是二進制值嗎?如果是這樣,有多大? (32位或64?)什麼排序?
  • 「分解」是指什麼?如果您正在寫入TCP套接字,則無需擔心數據包邊界; TCP負責這一點。
  • 收件人是否發回任何內容,如成功或失敗指示?
  • 整個文件傳輸時會發生什麼?
    • 兩端應假定連接必須關閉?
    • 或者您可以通過單個連接發送多個文件嗎?如果是這樣,發件人如何指示另一個文件將會跟隨?

此外,您使用的術語 「客戶端」 和 「服務器」 落後。通常,「客戶端」是啓動到服務器的連接的機器,而「服務器」是等待來自客戶端的連接的機器。

+0

謝謝你的幫助,我也意識到我正在做的落後,馬上修好! – 2012-04-12 04:55:51

1

您還可以從服務器添加確認,一旦該文件的特定部分是收到, 類似於我們在HTTP協議,這將確保正確已經在服務器上接收到文件的傳送。

+0

如果它是一個TCP套接字,有什麼用?我們正在運行一個可靠的協議。 – blackcompe 2012-04-12 04:44:25

+0

@blackcompe它是可靠的,但你想知道文件傳輸是否已完成或取消/失敗/中斷 – 2012-04-12 04:48:57

+0

@Luiggi門多薩:是的,但不會拋出一個IOException異常,如果連接中斷? – blackcompe 2012-04-12 04:53:46

相關問題