2010-03-07 20 views
1

我正在構建一個簡單的客戶端 - 服務器聊天系統。.Net使用Chr()解析文本

客戶端將數據發送到服務器,服務器將數據重新發送到所有其他客戶端。我正在使用TcpListener和網絡流類在客戶端和服務器之間發送數據。

我需要發送的,例如,該字段:我用29

我還使用ASCII字符30 ASCII字符標記的結束將它們分開的名字,文本,時間戳等流數據。

數據以UTF8編碼..

這是一個很好的方法嗎?我會遇到問題嗎?有更好的方法嗎?

UPDATE:

也許我的問題被誤解了,所以我解釋一下更好.. 假設有數據的列表,從客戶端發送到服務器,並假設發送只在一個所有數據流,你如何發送這些數據?

  • 使用標記
  • 使用字符作爲分隔符
  • 使用固定長度,每場

回答

7

而不是劃定的文字,我覺得簡單的長度前綴個人消息 - 所以而不是寫作

message [TERMINATOR] 

你'd write

[LENGTH] message 

(以二進制形式發送長度,而不是文本 - 要麼是固定長度的數字,例如, 4字節,或者如果你願意犧牲簡單性以減小傳輸的數據大小,則可變長度數)

然後很容易從流中準確讀取正確的數據量而不必擔心關於超出下一條消息。唯一的缺點是,在開始發送郵件之前,您需要知道郵件的長度,但在這種情況下,我認爲這不應該成爲問題。

順便說一句,UTF-8是編碼,而不是一個加密算法。

+0

謝謝你... 你對使用字符29分隔同一個流的不同字段有什麼看法? – Marcx 2010-03-07 13:52:10

+0

@Marcx:同樣的 - 我會使用長度前綴。 – 2010-03-07 15:06:16

0

我認爲,另一個選擇可能是序列化/反序列化您的對象,並使用.NET Remoting發送/接收它們。您也可以在接收時發送和解密時加密對象。

The Code Project我發現了一個源代碼的例子。

+0

看起來不錯,我會試試謝謝你! – Marcx 2010-03-07 17:50:00