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

C#異步傳輸字符串服務(wù)端的實現(xiàn)

開發(fā) 后端
C#異步傳輸字符串服務(wù)端的實現(xiàn)是如何的呢?C#異步傳輸字符串服務(wù)端的實現(xiàn)的實例具體的操作是什么呢?那么本文就向你介紹這方面的內(nèi)容。

C#異步傳輸字符串服務(wù)端的實現(xiàn)當程序越來越復(fù)雜的時候,就需要越來越高的抽象,所以從現(xiàn)在起我們不再把所有的代碼全部都扔進Main()里,這次我創(chuàng)建了一個RemoteClient類,它對于服務(wù)端獲取到的TcpClient進行了一個包裝:

C#異步傳輸字符串服務(wù)端的實現(xiàn)實例:

  1. public class RemoteClient {  
  2. private TcpClient client;  
  3. private NetworkStream streamToClient;  
  4. private const int BufferSize = 8192;  
  5. private byte[] buffer;  
  6. private RequestHandler handler;  
  7.  //C#異步傳輸字符串服務(wù)端的實現(xiàn)
  8. public RemoteClient(TcpClient client) {  
  9. this.client = client;  
  10.  
  11. // 打印連接到的客戶端信息  
  12. Console.WriteLine("\nClient Connected!{0} <-- {1}",  
  13. client.Client.LocalEndPoint,  
  14.  client.Client.RemoteEndPoint);  
  15.  
  16. // 獲得流  
  17. streamToClient = client.GetStream();  
  18. buffer = new byte[BufferSize];  
  19.  
  20. // 設(shè)置RequestHandler  
  21. handler = new RequestHandler();  
  22.  
  23. // 在構(gòu)造函數(shù)中就開始準備讀取  
  24. AsyncCallback callBack =   
  25. new AsyncCallback(ReadComplete);  
  26. streamToClient.BeginRead(buffer,   
  27. 0, BufferSize, callBack, null);  
  28. }  
  29.  
  30. // 再讀取完成時進行回調(diào)  
  31. private void ReadComplete(IAsyncResult ar) {  
  32. int bytesRead = 0;  
  33. try {  
  34. lock (streamToClient) {  
  35. bytesRead = streamToClient.EndRead(ar);  
  36. Console.WriteLine("Reading data, {0} bytes ...", bytesRead);  
  37. }  
  38. if (bytesRead == 0) throw new Exception("讀取到0字節(jié)");  
  39.  //C#異步傳輸字符串服務(wù)端的實現(xiàn)
  40. string msg = Encoding.Unicode.GetString(buffer, 0, bytesRead);  
  41. Array.Clear(buffer,0,buffer.Length);  
  42. // 清空緩存,避免臟讀  
  43.  
  44. string[] msgArray = handler.GetActualString(msg);   
  45.   // 獲取實際的字符串  
  46.  
  47. // 遍歷獲得到的字符串  
  48. foreach (string m in msgArray) {  
  49. Console.WriteLine("Received: {0}", m);  
  50. string back = m.ToUpper();  
  51.  
  52. // 將得到的字符串改為大寫并重新發(fā)送  
  53. byte[] temp = Encoding.Unicode.GetBytes(back);  
  54. streamToClient.Write(temp, 0, temp.Length);  
  55. streamToClient.Flush();  
  56. Console.WriteLine("Sent: {0}", back);  
  57. }     //C#異步傳輸字符串服務(wù)端的實現(xiàn)
  58.  
  59. // 再次調(diào)用BeginRead(),完成時調(diào)用自身,形成無限循環(huán)  
  60. lock (streamToClient) {  
  61. AsyncCallback callBack =  
  62.  new AsyncCallback(ReadComplete);  
  63. streamToClient.BeginRead(buffer,   
  64. 0, BufferSize, callBack, null);  
  65. }  
  66. catch(Exception ex) {  
  67. if(streamToClient!=null)  
  68. streamToClient.Dispose();  
  69. client.Close();  
  70. Console.WriteLine(ex.Message);    
  71. // 捕獲異常時退出程序    
  72. }  
  73. }  
  74. }  

隨后,我們在主程序中僅僅創(chuàng)建TcpListener類型實例,由于RemoteClient類在構(gòu)造函數(shù)中已經(jīng)完成了初始化的工作,所以我們在下面的while循環(huán)中我們甚至不需要調(diào)用任何方法:

  1. class Server {  
  2. static void Main(string[] args) {  
  3. Console.WriteLine("Server is running ... ");  
  4. IPAddress ip = new IPAddress(new byte[] { 127, 0, 0, 1 });  
  5. TcpListener listener = new TcpListener(ip, 8500);  
  6.  
  7. listener.Start();   // 開始偵聽  
  8. Console.WriteLine("Start Listening ...");  
  9.  
  10. while (true) {  
  11. // 獲取一個連接,同步方法,在此處中斷  
  12. TcpClient client = listener.AcceptTcpClient();    
  13. RemoteClient wapper = new RemoteClient(client);  
  14. }  
  15. }  //C#異步傳輸字符串服務(wù)端的實現(xiàn)

好了,服務(wù)端的實現(xiàn)現(xiàn)在就完成了。

C#異步傳輸字符串服務(wù)端的實現(xiàn)方面內(nèi)容就向你介紹到這里,希望對你了解和學(xué)習C#異步傳輸字符串有所幫助。

【編輯推薦】

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

2009-08-21 16:27:44

C#服務(wù)端程序

2009-08-21 14:33:15

C#異步傳輸字符串

2009-08-21 16:37:54

C#客戶端程序

2009-08-21 15:36:41

服務(wù)端與客戶端

2009-08-21 15:54:40

服務(wù)端與客戶端

2009-08-21 15:22:56

端口偵聽

2009-08-11 10:26:49

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

2009-09-02 16:21:20

C#字符串

2009-08-21 15:59:22

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

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#字符串

2009-08-07 13:50:11

C#字符串

2009-08-06 16:01:09

C#字符串函數(shù)大全

2009-08-21 16:14:52

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

2009-08-21 15:06:09

C#連接字符串
點贊
收藏

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