C# Socket异步通讯是如何实现的呢

  • C# Socket异步通讯是如何实现的呢?C# Socket异步通讯客户端设计的思路是什么呢?那么本文就向你介绍具体的内容。
  •  

    C# Socket异步通讯客户端实现源码

    C# Socket异步通讯客户端之主程序:

      
      
    1. public static int Main(String[] args)  
    2. {  
    3.  
    4. IPAddress ipAddress = IPAddress.Parse("192.168.1.104");  
    5. int port = 20000;  
    6. IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);  
    7.  
    8. // 生成一个TCP/IP socket.  
    9. Socket client = new Socket(AddressFamily.InterNetwork,  
    10. SocketType.Stream, ProtocolType.Tcp);  
    11.  
    12. // 与目标终端连接.  
    13. client.BeginConnect(remoteEP,  
    14. new AsyncCallback(ConnectCallback), client);  
    15. //等待,直到连接程序完成。在ConnectCallback中适当位置有connecDone.Set()语句  
    16. connectDone.WaitOne();  
    17.  
    18. // 发送数据到远程终端.  
    19. Send(client, "This is a test<EOF>");  
    20. sendDone.WaitOne();  
    21.  
    22. // 接收返回数据.  
    23. Receive(client);  
    24. receiveDone.WaitOne();  
    25.  
    26. // Write the response to the console.  
    27. Console.WriteLine("Response received : {0}", response);  
    28.  
    29. // Release the socket.  
    30. client.Shutdown(SocketShutdown.Both);  
    31. client.Close();  
    32.  
    33. return 0;  
    34.  

    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();  

    C# Socket异步通讯客户端之数据接收:

      
      
    1.    private static void Receive(Socket client)  
    2. {  
    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.     
    12. }  
    13.  
    14. private static void ReceiveCallback(IAsyncResult ar)  
    15. {  
    16.  
    17. // 从输入参数异步state对象中获取state和socket对象  
    18. StateObject state = (StateObject)ar.AsyncState;  
    19. Socket client = state.workSocket;  
    20.  
    21. //从远程设备读取数据  
    22. int bytesRead = client.EndReceive(ar);  
    23.  
    24. if (bytesRead > 0)  
    25. {  
    26. // 有数据,存储.  
    27. state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead));  
    28.  
    29. // 继续读取.  
    30. client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,  
    31. new AsyncCallback(ReceiveCallback), state);  
    32. }  
    33. else 
    34. {  
    35. // 所有数据读取完毕.  
    36. if (state.sb.Length > 1)  
    37. {  
    38. response = state.sb.ToString();  
    39. }  
    40. // 所有数据读取完毕的指示信号.  
    41. receiveDone.Set();  
    42. }  
    43.  

    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.  
    11. private static void SendCallback(IAsyncResult ar)  
    12. {  
    13.  
    14. // 从state对象中获取socket  
    15. Socket client = (Socket)ar.AsyncState;  
    16.  
    17. // 完成数据发送.  
    18. int bytesSent = client.EndSend(ar);  
    19. Console.WriteLine("Sent {0} bytes to server.", bytesSent);  
    20.  
    21. // 指示数据已经发送完成,主线程继续.  
    22. sendDone.Set();  
    23.  

    C# Socket异步通讯客户端的实现源码内容就基本向你介绍到这里,希望对你了解和学习C# Socket异步通讯有所帮助。

    【编辑推荐】

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值