首先,通過以純文本字符串的形式發送用戶名和密碼,您幾乎可以自由地將其發送出去 - 任何擁有一些基本工具的人都可以嗅探用戶名和密碼。您將需要閱讀密碼學以及如何確保連接。 Java有一個內置的密碼庫,這使得這非常容易。
如果可能的話,我會推薦使用已經開發的聊天協議,如XMPP(Jabber),因爲它已經存在很多免費的Java庫實現,比如Smack,它將爲您做所有事情。實際上,這裏不需要重新發明輪子,除非你這樣做是爲了一個不允許任何使用外部圖書館的學校項目,而這些圖書館本身是非常雄心勃勃的。 XMPP支持文本聊天,語音聊天和文件傳輸。
還有一些功能齊全的開源聊天客戶端,您可以根據自己的特定需求進行修改。但要記住的一點是開源項目的許可。一些開放源代碼許可證(如流行的GPL)要求在項目中使用開源項目的任何部分都要求您發佈整個項目的源代碼。這對於一個公司來說可能是非常災難性的,所以要小心。
如果你仍想從頭開始,那麼你需要實現自己的協議通信的。你必須自己設計這個,同時考慮到你將如何整合gstreamer和文件傳輸。
同樣,我會推薦至少看看一些已經設計好的協議,比如XMPP,以獲得一些想法。
通常,協議有,
- 一些數據說明這是什麼類型的請求/響應的。這可能是一個數字值存儲爲單個字節,或者一些文本字符串,就像在HTTP中所做的那樣
- 更多與消息的用戶有關的數據。可能是IP地址,用戶名,兩者的組合等。如果您直接進行通信,則不需要不通過中間人服務器
- 發送請求
- 時的數據本身
- 某種形式的加密。最開始的用戶被授權
例如,一個很基本的協議可能是後,
Request type: 1 byte. 1 = text, 2 = voice data, 3 = file transfer, 4 = request for currently logged-in client list
Destination: int (IP address)
Time: long. Best to send this as UTC time, e.g. what System.currentTimeMillis returns
Length of data: int
Data: variable length data, depending on type
然後,發送每種類型的數據,你會執行不同的數據,
Text: string as sent by DataStream
Voice: voice data from gstreamer (not sure how gstreamer works)
File transfer:
File name: String as sent by DataStream
Length: long
Data: As read from FileInputStream
List of currently-logged in clients:
Data: as sent by DataStream.writeObject
祝你好運
+1。 (+2?我會)很多細節和很多事情說。一些注意事項:目的地可能是一個ID,用戶名等,特別是如果有外部通信以及內部。密碼100%應該/必須加密。此外,密碼應始終存儲和傳輸散列。所以'hash - > encrypt - > transmit - > decrypt - > authenticate'。不應該有任何已知的方法來顛倒散列 - 你想要的最後一件事是有人獲取每個人的電子郵件密碼。 – 2013-02-23 19:59:04
謝謝oroboro!這真是一個很好的解釋! +1! – kunal18 2013-02-23 20:06:05