簡體   English   中英

如何在C#-> Java(Android)之間進行套接字編程

[英]How to approach socket programming between C# -> Java (Android)

我最近打開了適用於Windows和Android的服務器/客戶端應用程序,該應用程序允許通過套接字連接將Windows中的文件發送到Android手機。

它非常適合單個文件,但是嘗試在單個流中發送多個文件給我帶來了問題。 我還意識到,除了二進制數據之外,我還需要通過套接字發送消息以指示錯誤狀態和其他應用程序消息。 我幾乎沒有網絡編程方面的經驗,並且想知道什么是最好的前進方式。

基本上,應用程序的C#服務器端只是進入偵聽狀態,並使用Socket.SendFile傳輸文件。 在Android上,我使用標准的Java Socket.getInputStream()來接收文件。 這對於單個文件傳輸非常有用,但是我應該如何處理多個文件和錯誤/消息信息? 我需要為每個文件使用不同的套接字嗎? 我應該使用更高級別的框架來處理此問題,還是可以通過單個套接字發送所有內容? 關於框架或學習材料還有其他建議嗎?

基本上,您必須定義某種數據傳輸協議。 您可以嘗試查找現有協議或定義自己的協議。 現在,您的協議定義如下:

  • 客戶端連接到服務器
  • 服務器發送文件內容並終止連接
  • 客戶端接收文件的內容,直到連接終止

通過TCP套接字進行通信意味着通常必須將連接視為雙向字節流。 設計協議的最佳方法是使它描述將要發送的內容,以便接收方知道期望什么。

為了解決您的問題,您的協議可能看起來像這樣:

  • 客戶端連接到服務器
  • 服務器發送將傳輸的文件數(以4字節整數表示),
  • 客戶端收到的文件數量(4字節整數),
  • 服務器發送第一個文件的大小(為4字節整數-但這會將最大文件大小限制為4GB)
  • 客戶端收到第一個文件的大小
  • 服務器發送第一個文件的內容
  • 客戶端接收第一個文件的內容-它從TCP流中讀取字節數作為第一個文件的大小,
  • 服務器發送第二個文件的大小
  • ....
  • 發送所有文件后,服​​務器關閉連接
  • 客戶端收到最后一個文件后,等待服務器關閉連接並關閉連接

您可以通過發送文件名(以文件名長度開頭)或一些確認或錯誤代碼來豐富此簡單協議。 您可以以n字節的塊的形式發送文件內容,並在每個塊之后發送一個校驗和,客戶端必須對此進行校驗。 您的想象力是唯一的極限。

暫無
暫無

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

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