成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#異步傳輸字符串客戶端的實現

開發 后端
C#異步傳輸字符串客戶端的實現是如何什么呢?C#異步傳輸字符串客戶端的實現需要注意的是什么呢?那么本文就向你介紹相關的內容。

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

  1. public class ServerClient {  
  2. private const int BufferSize = 8192;  
  3. private byte[] buffer;  
  4. private TcpClient client;  
  5. private NetworkStream streamToServer;  
  6. private string msg = "Welcome to TraceFact.Net!";  
  7.  //C#異步傳輸字符串客戶端的實現
  8. public ServerClient() {  
  9. try {  
  10. client = new TcpClient();  
  11. client.Connect("localhost", 8500);    
  12. // 與服務器連接  
  13. catch (Exception ex) {  
  14. Console.WriteLine(ex.Message);  
  15. return;  
  16. }  
  17. buffer = new byte[BufferSize];  
  18.  //C#異步傳輸字符串客戶端的實現
  19. // 打印連接到的服務端信息  
  20. Console.WriteLine("Server Connected!{0} --> {1}",  
  21. client.Client.LocalEndPoint,  
  22.  client.Client.RemoteEndPoint);  
  23.  
  24. streamToServer = client.GetStream();  
  25. }  
  26.  
  27. // 連續發送三條消息到服務端  
  28. public void SendMessage(string msg) {  
  29.  
  30. msg = String.Format("[length={0}]{1}",  
  31.  msg.Length, msg);  
  32.  
  33. for (int i = 0; i <= 2; i++) {  
  34. byte[] temp = Encoding.Unicode.GetBytes(msg);    
  35.  // 獲得緩存  
  36. try {  
  37. streamToServer.Write(temp, 0, temp.Length);   
  38. // 發往服務器  
  39. Console.WriteLine("Sent: {0}", msg);  
  40. catch (Exception ex) {  
  41. Console.WriteLine(ex.Message);  
  42. break;  
  43. }  
  44. }  
  45.  //C#異步傳輸字符串客戶端的實現
  46. lock (streamToServer) {  
  47. AsyncCallback callBack =   
  48. new AsyncCallback(ReadComplete);  
  49. streamToServer.BeginRead(  
  50. buffer, 0, BufferSize, callBack, null);  
  51. }  
  52. }  
  53.  
  54. public void SendMessage() {  
  55. SendMessage(this.msg);  
  56. }  
  57.  
  58. // 讀取完成時的回調方法  
  59. private void ReadComplete(IAsyncResult ar) {  
  60. int bytesRead;  
  61.  
  62. try {  
  63. lock (streamToServer) {  
  64. bytesRead = streamToServer.EndRead(ar);  
  65. }  
  66. if (bytesRead == 0) throw new 
  67.  Exception("讀取到0字節");  
  68.  
  69. string msg = Encoding.Unicode.GetString(buffer, 0, bytesRead);  
  70. Console.WriteLine("Received: {0}", msg);  
  71. Array.Clear(buffer, 0, buffer.Length);    
  72. // 清空緩存,避免臟讀  
  73.  
  74. lock (streamToServer) {  
  75. AsyncCallback callBack =   
  76. new AsyncCallback(ReadComplete);  
  77. streamToServer.BeginRead(buffer,  
  78.  0, BufferSize, callBack, null);  
  79. }  
  80. catch (Exception ex) {  
  81.  
  82. if(streamToServer!=null)  
  83. streamToServer.Dispose();  
  84. client.Close();  
  85.  
  86. Console.WriteLine(ex.Message);  
  87. }  
  88. }  //C#異步傳輸字符串客戶端的實現
  89. }  

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

  1. class Client {  
  2. static void Main(string[] args) {  
  3. ConsoleKey key;  
  4.  
  5. ServerClient client = new ServerClient();  
  6. client.SendMessage();  
  7.  
  8. Console.WriteLine("\n\n輸入\"Q\"鍵退出。");  
  9. do {  
  10. key = Console.ReadKey(true).Key;  
  11. while (key != ConsoleKey.Q);  
  12. }  
  13. }  

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

C#異步傳輸字符串客戶端的實現的基本內容就向你介紹到這里,希望對你了解和學習C#異步傳輸字符串有所幫助。

【編輯推薦】

  1. 淺析C#中異步和多線程的區別
  2. C# Socket通信三大問題詳解
  3. C#異步調用四大方法詳解
  4. C#網絡編程消息發送問題淺析
  5. C#異步傳輸字符串服務端的實現
責任編輯:仲衡 來源: 博客園
相關推薦

2009-08-21 16:37:54

C#客戶端程序

2009-08-21 14:25:23

C#異步傳輸字符串

2009-08-21 16:27:44

C#服務端程序

2009-08-21 15:36:41

服務端與客戶端

2009-08-21 15:54:40

服務端與客戶端

2009-08-06 17:12:13

C# WebServi

2009-08-21 17:53:25

C#網絡編程客戶端程序

2020-03-19 08:00:00

客戶端KubernetesAPI

2009-08-11 10:26:49

C#算法C#字符串反轉

2011-04-07 09:33:01

Activex

2009-08-21 15:59:22

服務端與客戶端通信

2009-08-21 16:14:52

服務端與客戶端通信

2009-09-02 16:21:20

C#字符串

2009-08-07 13:55:35

Java客戶端類調用C# WebServi

2011-08-25 10:37:15

leveldb的訪問封C#客戶端源碼

2009-08-06 16:01:09

C#字符串函數大全

2009-08-07 14:15:21

C#字符串分割

2009-08-07 14:22:56

C#字符串搜索

2009-08-07 14:34:33

C#模式字符串

2009-08-24 17:06:37

C#字符串
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕乱码亚洲精品一区 | av在线天天 | 国产精品久久久久一区二区三区 | 亚洲国产69| 国产一区二区三区久久久久久久久 | 本道综合精品 | 中文字幕丁香5月 | 久久综合欧美 | 欧美性猛交一区二区三区精品 | 看片91| 欧美aⅴ| 一区二区三区久久 | 国产一区免费视频 | 高清久久 | 国产高清精品一区 | 在线中文视频 | 日韩国产精品一区二区三区 | 国产日韩精品久久 | 国产精品久久久久久久7777 | 欧美成人精品一区二区三区 | 嫩草视频网 | 国产韩国精品一区二区三区 | 国产精品爱久久久久久久 | 日本久久精品视频 | 精品欧美乱码久久久久久 | 国产综合视频 | 色呦呦在线 | 国产精品久久久久久婷婷天堂 | 欧美国产精品一区二区 | 99精品国自产在线观看 | 精品视频一区二区 | 日韩日韩日韩日韩日韩日韩日韩 | 日日夜夜天天综合 | 国产午夜精品一区二区三区 | 97av视频在线 | 久久不卡 | www.亚洲精品| 噜噜噜噜狠狠狠7777视频 | 久久久久久亚洲欧洲 | 人人爽人人爽 | 国产一区免费 |