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

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

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

C#異步傳輸字符串服務(wù)端的實(shí)現(xiàn)當(dāng)程序越來越復(fù)雜的時(shí)候,就需要越來越高的抽象,所以從現(xiàn)在起我們不再把所有的代碼全部都扔進(jìn)Main()里,這次我創(chuàng)建了一個(gè)RemoteClient類,它對(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. // 打印連接到的客戶端信息  
  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ù)中就開始準(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. // 將得到的字符串改為大寫并重新發(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)用自身,形成無限循環(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類型實(shí)例,由于RemoteClient類在構(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();   // 開始偵聽  
  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#中異步和多線程的區(qū)別
  3. C# Socket通信三大問題詳解
  4. C#異步調(diào)用四大方法詳解
  5. C#網(wǎng)絡(luò)編程消息發(fā)送問題淺析
責(zé)任編輯:仲衡 來源: 博客園
相關(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 16:14:52

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

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-26 13:24:54

C#字符串

2009-08-24 13:04:44

操作步驟C#字符串

2009-08-07 13:50:11

C#字符串

2009-08-21 15:59:22

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

2009-08-07 14:46:59

C#匹配字符串

2009-08-07 15:49:46

使用C#字符串
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 欧美激情一区 | 91久久久久久久久久久久久 | 在线不卡视频 | 国产99久久精品一区二区永久免费 | 五月天激情电影 | 成人黄页在线观看 | 亚洲乱码国产乱码精品精的特点 | 日韩色视频 | 日韩精品一区二区三区四区视频 | 国产精品一区二 | 天天躁日日躁xxxxaaaa | 人人色视频 | 精品一区二区三区在线观看国产 | 国产精品黄色 | 亚洲黄色国产 | 99久久久国产精品 | 亚洲精品一区av在线播放 | 国产欧美精品在线 | 国产一区| 日韩国产中文字幕 | 成人av网站在线观看 | 久久精品国产99国产精品 | 国产精品亚洲一区二区三区在线观看 | 久久久久av | 婷婷成人在线 | 久久久精 | 人人爽日日躁夜夜躁尤物 | 中文字幕一区二区三区乱码在线 | 中文字幕一区二区三区四区五区 | 范冰冰一级做a爰片久久毛片 | 91免费在线视频 | 国产精品久久久久久久久动漫 | 国产一二三视频在线观看 | 成人欧美一区二区三区色青冈 | 狠狠色网 | 日本不卡一区二区 | 精品人伦一区二区三区蜜桃网站 | 日韩国产精品一区二区三区 | 一区二区在线不卡 | 精品91久久久 | 成年男女免费视频网站 |