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

C# Socket異步通訊實現詳解

開發 后端
C# Socket異步通訊是如何實現的呢?C# Socket異步通訊客戶端設計的思路是什么呢?那么本文就向你介紹具體的內容。

C# Socket異步通訊客戶端實現源碼

C# Socket異步通訊客戶端之主程序:

  1. using System;
  2. using System.Net;
  3. using System.Net.Sockets;
  4. using System.Threading;
  5. using System.Text;
  6. // State object for receiving data from remote device.
  7. public class StateObject {
  8. // Client socket.
  9. public Socket workSocket = null;
  10. // Size of receive buffer.
  11. public const int BufferSize = 256;
  12. // Receive buffer.
  13. public byte[] buffer = new byte[BufferSize];
  14. // Received data string.
  15. public StringBuilder sb = new StringBuilder();
  16. }
  17. public class AsynchronousClient {
  18. // The port number for the remote device.
  19. private const int port = 11000;
  20. // ManualResetEvent instances signal completion.
  21. private static ManualResetEvent connectDone =
  22. new ManualResetEvent(false);
  23. private static ManualResetEvent sendDone =
  24. new ManualResetEvent(false);
  25. private static ManualResetEvent receiveDone =
  26. new ManualResetEvent(false);
  27. // The response from the remote device.
  28. private static String response = String.Empty;
  29. private static void StartClient() {
    // Connect to a remote device.
  30.  
  31. try {// Establish the remote endpoint for the socket.
    // The name of the
    // remote device is "host.contoso.com".
    IPHostEntry ipHostInfo = Dns.Resolve("host.contoso.com");
    IPAddress ipAddress = ipHostInfo.AddressList[0];
    IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);
     
  32. // 生成一個TCP/IP socket.  
  33. Socket client = new Socket(AddressFamily.InterNetwork,  
  34. SocketType.Stream, ProtocolType.Tcp);  
  35.  
  36. // 與目標終端連接.  
  37. client.BeginConnect(remoteEP,  
  38. new AsyncCallback(ConnectCallback), client);  
  39. //等待,直到連接程序完成。在ConnectCallback中適當位置有connecDone.Set()語句  
  40. connectDone.WaitOne();  
  41.  
  42. // 發送數據到遠程終端.  
  43. Send(client, "This is a test<EOF>");  
  44. sendDone.WaitOne();  
  45.  
  46. // 接收返回數據.  
  47. Receive(client);  
  48. receiveDone.WaitOne();  
  49.  
  50. // Write the response to the console.  
  51. Console.WriteLine("Response received : {0}", response);  
  52.  
  53. // Release the socket.  
  54. client.Shutdown(SocketShutdown.Both);  
  55. client.Close();  
  56. return 0;  

C# Socket異步通訊客戶端之連接部分Callback:

  1. private static void ConnectCallback(IAsyncResult ar)  
  2. {  
  3.  
  4. // 從state對象獲取socket.  
  5. Socket client = (Socket)ar.AsyncState;  
  6.  
  7. // 完成連接.  
  8. client.EndConnect(ar);  
  9.  
  10. Console.WriteLine("Socket connected to {0}",  
  11. client.RemoteEndPoint.ToString());  
  12.  
  13. // 連接已完成,主線程繼續.  
  14. connectDone.Set();
  15. } catch (Exception e) {
  16. Console.WriteLine(e.ToString());
  17. }
  18. }

C# Socket異步通訊客戶端之數據接收:

  1.    private static void Receive(Socket client)  
  2. try {{  
  3.  
  4. // 構造容器state.  
  5. StateObject state = new StateObject();  
  6. state.workSocket = client;  
  7.  
  8. // 從遠程目標接收數據.  
  9. client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,  
  10. new AsyncCallback(ReceiveCallback), state);  
  11. } catch (Exception e) {
  12. Console.WriteLine(e.ToString());
  13. }
    }
  14.  
  15. private static void ReceiveCallback(IAsyncResult ar)  
  16. {  
  17.  
  18. // 從輸入參數異步state對象中獲取state和socket對象  
  19. StateObject state = (StateObject)ar.AsyncState;  
  20. Socket client = state.workSocket;  
  21.  
  22. //從遠程設備讀取數據  
  23. int bytesRead = client.EndReceive(ar);  
  24.  
  25. if (bytesRead > 0)  
  26. {  
  27. // 有數據,存儲.  
  28. state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead));  
  29.  
  30. // 繼續讀取.  
  31. client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,  
  32. new AsyncCallback(ReceiveCallback), state);  
  33. }  
  34. else 
  35. {  
  36. // 所有數據讀取完畢.  
  37. if (state.sb.Length > 1)  
  38. {  
  39. response = state.sb.ToString();  
  40. }  
  41. // 所有數據讀取完畢的指示信號.  
  42. receiveDone.Set();  
  43. }  
  44. } catch (Exception e) {
  45. Console.WriteLine(e.ToString());
  46. }
  47. }

C# Socket異步通訊客戶端之發送數據:

  1. private static void Send(Socket client, String data)  
  2. {  
  3. // 格式轉換.  
  4. byte[] byteData = Encoding.ASCII.GetBytes(data);  
  5.  
  6. // 開始發送數據到遠程設備.  
  7. client.BeginSend(byteData, 0, byteData.Length, 0,  
  8. new AsyncCallback(SendCallback), client);  
  9. }   
  10. private static void SendCallback(IAsyncResult ar)  
  11. {  
  12.  
  13. // 從state對象中獲取socket  
  14. Socket client = (Socket)ar.AsyncState;  
  15.  
  16. // 完成數據發送.  
  17. int bytesSent = client.EndSend(ar);  
  18. Console.WriteLine("Sent {0} bytes to server.", bytesSent);  
  19.  
  20. // 指示數據已經發送完成,主線程繼續.  
  21. sendDone.Set();  
  22. } catch (Exception e) {
  23. Console.WriteLine(e.ToString());
  24. }

  25. }
  26. public static int Main(String[] args) {
  27. StartClient();
  28. return 0;
  29. }
  30. }

C# Socket異步通訊客戶端的實現源碼內容就基本向你介紹到這里,希望對你了解和學習C# Socket異步通訊有所幫助。

【編輯推薦】

  1. C#對象初始化學習總結
  2. C#改寫方法學習筆記
  3. 概述C#加框和消框
  4. 淺析C#異步操作
  5. 描述C#異步Socket

 

責任編輯:仲衡 來源: 博客園
相關推薦

2009-08-03 16:45:02

C#異步Socket

2009-08-21 10:13:02

C#異步初步

2024-03-21 08:34:49

Vue3WebSocketHTTP

2010-03-18 17:23:55

Java Socket

2010-12-22 10:21:17

C#基礎

2009-08-21 09:20:44

C#異步套接字

2009-08-21 11:39:58

C# Socket通信

2025-04-30 01:50:00

C#異步編程

2009-08-25 18:04:30

C#實現Singlet

2009-09-09 18:50:23

C# 加密RSA

2009-08-31 16:23:13

C#接口

2009-08-21 11:24:16

C#異步調用

2009-08-18 16:45:40

C# Raw Sock

2009-08-26 12:59:08

C#打印設置

2009-08-26 09:22:44

C#實現打印功能

2009-08-26 11:07:36

C#打印窗體

2009-08-26 11:32:37

C#打印文檔

2009-08-27 17:14:36

C# Socket

2009-08-25 17:43:17

C#串口監聽

2009-09-09 18:57:26

C# 加密TripleDES
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产高清在线精品 | 999热精品 | 亚洲一区国产精品 | 成人福利 | 色婷婷综合在线观看 | 亚洲一区 | 性一交一乱一伦视频免费观看 | 不卡视频一区二区三区 | 国产欧美一区二区精品久导航 | 国内精品久久精品 | 欧美日韩一区二区三区不卡视频 | 日韩欧美在线视频播放 | h视频在线观看免费 | 亚洲综合一区二区三区 | 成年网站在线观看 | 亚州精品成人 | 色婷婷影院 | 天堂资源最新在线 | 国产成人精品久久二区二区91 | 国产精品区二区三区日本 | 成人欧美一区二区三区在线播放 | 国产精品久久久久久福利一牛影视 | 中文字幕成人免费视频 | 日本一区二区三区四区 | 日韩欧美一区在线 | 一级毛片在线播放 | 亚洲欧美日韩国产综合 | 国产精品精品久久久 | 欧美精品一区二区三区四区五区 | 日日人人| 亚洲免费大片 | 亚洲视频二 | 日韩欧美在线观看视频网站 | 国产精品久久久久久久久 | 精品综合 | 红色av社区 | 国产成人一区 | 国产亚洲精品久久19p | 日韩成人免费视频 | 密桃av| 国产高清区 |