打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C# Socket异步通讯实现详解

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

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

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

C# Socket异步通讯客户端之连接部分Callback:

  1. private static void ConnectCallback(IAsyncResult ar)
  2. {
  3. // 从state对象获取socket.
  4. Socket client = (Socket)ar.AsyncState;
  5. // 完成连接.
  6. client.EndConnect(ar);
  7. Console.WriteLine("Socket connected to {0}",
  8. client.RemoteEndPoint.ToString());
  9. // 连接已完成,主线程继续.
  10. connectDone.Set();
  11. }

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

  1.    private static void Receive(Socket client)
  2. {
  3. // 构造容器state.
  4. StateObject state = new StateObject();
  5. state.workSocket = client;
  6. // 从远程目标接收数据.
  7. client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
  8. new AsyncCallback(ReceiveCallback), state);
  9.   
  10. }
  11. private static void ReceiveCallback(IAsyncResult ar)
  12. {
  13. // 从输入参数异步state对象中获取state和socket对象
  14. StateObject state = (StateObject)ar.AsyncState;
  15. Socket client = state.workSocket;
  16. //从远程设备读取数据
  17. int bytesRead = client.EndReceive(ar);
  18. if (bytesRead > 0)
  19. {
  20. // 有数据,存储.
  21. state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead));
  22. // 继续读取.
  23. client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
  24. new AsyncCallback(ReceiveCallback), state);
  25. }
  26. else
  27. {
  28. // 所有数据读取完毕.
  29. if (state.sb.Length > 1)
  30. {
  31. response = state.sb.ToString();
  32. }
  33. // 所有数据读取完毕的指示信号.
  34. receiveDone.Set();
  35. }
  36. }

C# Socket异步通讯客户端之发送数据:

  1. private static void Send(Socket client, String data)
  2. {
  3. // 格式转换.
  4. byte[] byteData = Encoding.ASCII.GetBytes(data);
  5. // 开始发送数据到远程设备.
  6. client.BeginSend(byteData, 0, byteData.Length, 0,
  7. new AsyncCallback(SendCallback), client);
  8. }
  9. private static void SendCallback(IAsyncResult ar)
  10. {
  11. // 从state对象中获取socket
  12. Socket client = (Socket)ar.AsyncState;
  13. // 完成数据发送.
  14. int bytesSent = client.EndSend(ar);
  15. Console.WriteLine("Sent {0} bytes to server.", bytesSent);
  16. // 指示数据已经发送完成,主线程继续.
  17. sendDone.Set();
  18. }
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Socket 同步和异步模式
c#(Socket)异步套接字代码示例
C# Socket 网络编程
WEB消息提醒实现之二 实现方式-websocket实现方式
VB.NET环境下的Socket编程举例
C# 简易异步日志类 [ C# | Log | TextWriterTraceListen...
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服