程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#網絡編程(異步傳輸字符串) - Part.3(6)

C#網絡編程(異步傳輸字符串) - Part.3(6)

編輯:關於C語言

在上面的SendMessage()方法中,我們讓它連續發送了三條同樣的消息,這麼僅僅是為了測試,因為異 步操作同樣會出現上面說過的:服務器將客戶端的請求拆開了的情況。最後我們在Main()方法中創建這個 類型的實例,然後調用SendMessage()方法進行測試:

class ClIEnt {
    static void
Main(string[] args) {
        ConsoleKey key;

        ServerClient client = new ServerClIEnt();
        clIEnt.SendMessage();

        Console.WriteLine("\n\n輸入\"Q\"鍵退出。");
        do {
            key = Console.ReadKey(true).Key;
        } while (key != ConsoleKey.Q);
    }
}

是不是感覺很清爽?因為良好的代碼重構,使得程序在復雜程度提高的情況下依然可以在一定程度上 保持良好的閱讀性。

3.程序測試

最後一步,我們先運行服務端,接著連續運行兩個客戶端,看看它們的輸出分別是什麼:

大家可以看到,在服務端,我們可以連接多個客戶端,同時為它們服務;除此以外,由接收的字節數 發現,兩個客戶端均有兩個請求被服務端合並成了一條請求,因為我們在其中加入了特殊的協議,所以在 服務端可以對這種情況進行良好的處理。

在客戶端,我們沒有采取類似的處理,所以當客戶端收到應答時,仍然會發生請求合並的情況。對於 這種情況,我想大家已經知道該如何處理了,就不再多費口舌了。

使用這種定義協議的方式有它的優點,但缺點也很明顯,如果客戶知道了這個協議,有意地輸入 [length=xxx],但是後面的長度卻不匹配,此時程序就會出錯。可選的解決辦法是對“[”和“]”進行編 碼,當客戶端有意輸入這兩個字符時,我們將它替換成“\[”和“\]”或者別的字符,在讀取後再將它還 原 。

關於這個范例就到此結束了,剩下的兩個范例都將采用異步傳輸的方式,並且會加入更多的協議內容 。下一篇我們將介紹如何向服務端發送或接收文件。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved