中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

化隆| 美姑县| 石河子市| 中山市| 雷山县| 太保市| 府谷县| 曲麻莱县| 呼伦贝尔市| 景谷| 隆子县| 栖霞市| 台前县| 昭苏县| 龙里县| 阳原县| 庄浪县| 辽宁省| 田林县| 疏附县| 垦利县| 儋州市| 隆林| 葵青区| 富锦市| 沅江市| 巴林左旗| 鹰潭市| 平南县| 贺州市| 上思县| 东乡族自治县| 长丰县| 临江市| 忻州市| 逊克县| 内丘县| 蓝田县| 凭祥市| 汾阳市| 德阳市|