偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

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

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

  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ù)端的實(shí)現(xiàn)
  8. public RemoteClient(TcpClient client) {  
  9. this.client = client;  
  10.  
  11. // 打印連接到的客戶(hù)端信息  
  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ù)中就開(kāi)始準(zhǔn)備讀取  
  24. AsyncCallback callBack =   
  25. new AsyncCallback(ReadComplete);  
  26. streamToClient.BeginRead(buffer,   
  27. 0, BufferSize, callBack, null);  
  28. }  
  29.  
  30. // 再讀取完成時(shí)進(jìn)行回調(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ù)端的實(shí)現(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.   // 獲取實(shí)際的字符串  
  46.  
  47. // 遍歷獲得到的字符串  
  48. foreach (string m in msgArray) {  
  49. Console.WriteLine("Received: {0}", m);  
  50. string back = m.ToUpper();  
  51.  
  52. // 將得到的字符串改為大寫(xiě)并重新發(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ù)端的實(shí)現(xiàn)
  58.  
  59. // 再次調(diào)用BeginRead(),完成時(shí)調(diào)用自身,形成無(wú)限循環(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. // 捕獲異常時(shí)退出程序    
  72. }  
  73. }  
  74. }  

隨后,我們?cè)谥鞒绦蛑袃H僅創(chuàng)建TcpListener類(lèi)型實(shí)例,由于RemoteClient類(lèi)在構(gòu)造函數(shù)中已經(jīng)完成了初始化的工作,所以我們?cè)谙旅娴膚hile循環(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();   // 開(kāi)始偵聽(tīng)  
  8. Console.WriteLine("Start Listening ...");  
  9.  
  10. while (true) {  
  11. // 獲取一個(gè)連接,同步方法,在此處中斷  
  12. TcpClient client = listener.AcceptTcpClient();    
  13. RemoteClient wapper = new RemoteClient(client);  
  14. }  
  15. }  //C#異步傳輸字符串服務(wù)端的實(shí)現(xiàn)

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

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

【編輯推薦】

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

2009-08-21 16:27:44

C#服務(wù)端程序

2009-08-21 14:33:15

C#異步傳輸字符串

2009-08-21 16:37:54

C#客戶(hù)端程序

2009-08-21 15:36:41

服務(wù)端與客戶(hù)端

2009-08-21 15:54:40

服務(wù)端與客戶(hù)端

2009-08-21 15:22:56

端口偵聽(tīng)

2009-08-11 10:26:49

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

2009-09-02 16:21:20

C#字符串

2009-08-21 16:14:52

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

2009-08-21 15:59:22

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

2009-08-06 16:01:09

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

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

2009-08-07 13:50:11

C#字符串

2009-08-24 13:04:44

操作步驟C#字符串

2009-08-26 13:24:54

C#字符串

2009-08-07 14:46:59

C#匹配字符串

2009-09-08 23:35:12

c# textbox失
點(diǎn)贊
收藏

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