自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C#異步傳輸字符串客戶端的實(shí)現(xiàn)

開發(fā) 后端
C#異步傳輸字符串客戶端的實(shí)現(xiàn)是如何什么呢?C#異步傳輸字符串客戶端的實(shí)現(xiàn)需要注意的是什么呢?那么本文就向你介紹相關(guān)的內(nèi)容。

C#異步傳輸字符串客戶端的實(shí)現(xiàn)與服務(wù)端類似,我們首先對(duì)TcpClient進(jìn)行一個(gè)簡(jiǎn)單的包裝,使它的使用更加方便一些,因?yàn)樗欠?wù)端的客戶,所以我們將類的名稱命名為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#異步傳輸字符串客戶端的實(shí)現(xiàn)
  8. public ServerClient() {  
  9. try {  
  10. client = new TcpClient();  
  11. client.Connect("localhost", 8500);    
  12. // 與服務(wù)器連接  
  13. catch (Exception ex) {  
  14. Console.WriteLine(ex.Message);  
  15. return;  
  16. }  
  17. buffer = new byte[BufferSize];  
  18.  //C#異步傳輸字符串客戶端的實(shí)現(xiàn)
  19. // 打印連接到的服務(wù)端信息  
  20. Console.WriteLine("Server Connected!{0} --> {1}",  
  21. client.Client.LocalEndPoint,  
  22.  client.Client.RemoteEndPoint);  
  23.  
  24. streamToServer = client.GetStream();  
  25. }  
  26.  
  27. // 連續(xù)發(fā)送三條消息到服務(wù)端  
  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. // 發(fā)往服務(wù)器  
  39. Console.WriteLine("Sent: {0}", msg);  
  40. catch (Exception ex) {  
  41. Console.WriteLine(ex.Message);  
  42. break;  
  43. }  
  44. }  
  45.  //C#異步傳輸字符串客戶端的實(shí)現(xiàn)
  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. // 讀取完成時(shí)的回調(diào)方法  
  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字節(jié)");  
  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#異步傳輸字符串客戶端的實(shí)現(xiàn)
  89. }  

在上面的SendMessage()方法中,我們讓它連續(xù)發(fā)送了三條同樣的消息,這么僅僅是為了測(cè)試,因?yàn)楫惒讲僮魍瑯訒?huì)出現(xiàn)上面說過的:服務(wù)器將客戶端的請(qǐng)求拆開了的情況。最后我們?cè)贛ain()方法中創(chuàng)建這個(gè)類型的實(shí)例,然后調(diào)用SendMessage()方法進(jìn)行測(cè)試:

  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. }  

是不是感覺很清爽?因?yàn)榱己玫拇a重構(gòu),使得程序在復(fù)雜程度提高的情況下依然可以在一定程度上保持良好的閱讀性。

C#異步傳輸字符串客戶端的實(shí)現(xiàn)的基本內(nèi)容就向你介紹到這里,希望對(duì)你了解和學(xué)習(xí)C#異步傳輸字符串有所幫助。

【編輯推薦】

  1. 淺析C#中異步和多線程的區(qū)別
  2. C# Socket通信三大問題詳解
  3. C#異步調(diào)用四大方法詳解
  4. C#網(wǎng)絡(luò)編程消息發(fā)送問題淺析
  5. C#異步傳輸字符串服務(wù)端的實(shí)現(xiàn)
責(zé)任編輯:仲衡 來源: 博客園
相關(guān)推薦

2009-08-21 16:37:54

C#客戶端程序

2009-08-21 14:25:23

C#異步傳輸字符串

2009-08-21 16:27:44

C#服務(wù)端程序

2009-08-21 15:36:41

服務(wù)端與客戶端

2009-08-21 15:54:40

服務(wù)端與客戶端

2009-08-06 17:12:13

C# WebServi

2009-08-21 17:53:25

C#網(wǎng)絡(luò)編程客戶端程序

2009-08-11 10:26:49

C#算法C#字符串反轉(zhuǎn)

2011-04-07 09:33:01

Activex

2020-03-19 08:00:00

客戶端KubernetesAPI

2009-08-21 15:59:22

服務(wù)端與客戶端通信

2009-08-21 16:14:52

服務(wù)端與客戶端通信

2009-09-02 16:21:20

C#字符串

2009-08-07 14:46:59

C#匹配字符串

2009-08-26 13:24:54

C#字符串

2009-08-24 17:06:37

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 13:04:44

操作步驟C#字符串
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)