91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中怎么實現一個異步傳輸字符串客戶端

發布時間:2021-07-08 14:28:29 來源:億速云 閱讀:126 作者:Leah 欄目:編程語言

這篇文章給大家介紹C#中怎么實現一個異步傳輸字符串客戶端,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

C#異步傳輸字符串客戶端的實現與服務端類似,我們首先對TcpClient進行一個簡單的包裝,使它的使用更加方便一些,因為它是服務端的客戶,所以我們將類的名稱命名為ServerClient:

public class ServerClient {  private const int BufferSize = 8192;  private byte[] buffer;  private TcpClient client;  private NetworkStream streamToServer;  private string msg = "Welcome to TraceFact.Net!";   //C#異步傳輸字符串客戶端的實現public ServerClient() {  try {  client = new TcpClient();  client.Connect("localhost", 8500);    // 與服務器連接  } catch (Exception ex) {  Console.WriteLine(ex.Message);  return;  }  buffer = new byte[BufferSize];   //C#異步傳輸字符串客戶端的實現// 打印連接到的服務端信息  Console.WriteLine("Server Connected!{0} --> {1}",  client.Client.LocalEndPoint,   client.Client.RemoteEndPoint);   streamToServer = client.GetStream();  }   // 連續發送三條消息到服務端  public void SendMessage(string msg) {   msg = String.Format("[length={0}]{1}",   msg.Length, msg);   for (int i = 0; i <= 2; i++) {  byte[] temp = Encoding.Unicode.GetBytes(msg);     // 獲得緩存  try {  streamToServer.Write(temp, 0, temp.Length);   // 發往服務器  Console.WriteLine("Sent: {0}", msg);  } catch (Exception ex) {  Console.WriteLine(ex.Message);  break;  }  }   //C#異步傳輸字符串客戶端的實現lock (streamToServer) {  AsyncCallback callBack =   new AsyncCallback(ReadComplete);  streamToServer.BeginRead(  buffer, 0, BufferSize, callBack, null);  }  }   public void SendMessage() {  SendMessage(this.msg);  }   // 讀取完成時的回調方法  private void ReadComplete(IAsyncResult ar) {  int bytesRead;   try {  lock (streamToServer) {  bytesRead = streamToServer.EndRead(ar);  }  if (bytesRead == 0) throw new  Exception("讀取到0字節");   string msg = Encoding.Unicode.GetString(buffer, 0, bytesRead);  Console.WriteLine("Received: {0}", msg);  Array.Clear(buffer, 0, buffer.Length);    // 清空緩存,避免臟讀   lock (streamToServer) {  AsyncCallback callBack =   new AsyncCallback(ReadComplete);  streamToServer.BeginRead(buffer,   0, BufferSize, callBack, null);  }  } catch (Exception ex) {   if(streamToServer!=null)  streamToServer.Dispose();  client.Close();   Console.WriteLine(ex.Message);  }  }  //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);  }  }

關于C#中怎么實現一個異步傳輸字符串客戶端就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德兴市| 九台市| 东方市| 平阳县| 嘉禾县| 永德县| 阳东县| 漳州市| 津南区| 镇沅| 华容县| 桦南县| 和硕县| 安阳县| 保亭| 万年县| 九寨沟县| 营口市| 武汉市| 东乡族自治县| 梧州市| 库伦旗| 阜宁县| 双峰县| 宣恩县| 遂溪县| 醴陵市| 百色市| 栾川县| 万载县| 杭锦后旗| 临海市| 慈溪市| 繁峙县| 应用必备| 晋中市| 吉木乃县| 泾川县| 卫辉市| 东港市| 工布江达县|