广告
返回顶部
首页 > 资讯 > 精选 >C#中怎么利用Socket实现异步通讯
  • 723
分享到

C#中怎么利用Socket实现异步通讯

2023-06-17 23:06:36 723人浏览 安东尼
摘要

这篇文章将为大家详细讲解有关C#中怎么利用Socket实现异步通讯,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。C# Socket异步通讯客户端之主程序:using System;using

这篇文章将为大家详细讲解有关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实现异步通讯就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: C#中怎么利用Socket实现异步通讯

本文链接: https://www.lsjlt.com/news/294432.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#中怎么利用Socket实现异步通讯
    这篇文章将为大家详细讲解有关C#中怎么利用Socket实现异步通讯,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。C# Socket异步通讯客户端之主程序:using System;using...
    99+
    2023-06-17
  • Java中怎么利用Socket实现一个通讯客户端
    本篇文章给大家分享的是有关Java中怎么利用Socket实现一个通讯客户端,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。具体客户端代码如下:import java.n...
    99+
    2023-06-17
  • Silverlight中怎么利用Socket实现通信
    这篇文章将为大家详细讲解有关Silverlight中怎么利用Socket实现通信,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一.Silverlight的Socket通信和控制台、WinFo...
    99+
    2023-06-17
  • .NET编程——利用C#实现TCP协议的异步通信Socket套接字(WinForm)
    本文将介绍利用基于TCP通信协议的Socket实现服务器与客户端之间的数据传输。 目录 前言 计算机通信 创建服务器 服务器通信 创建客户端 客户端通信 前言         TCP/IP(Transmission Control Pr...
    99+
    2023-09-04
    tcp/ip c# mysql 服务器
  • C#怎么实现Socket通信
    这篇文章给大家分享的是有关C#怎么实现Socket通信的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。代码如下: //创建socket对象     &nb...
    99+
    2023-06-14
  • C#中怎么利用AsyncResult实现异步编程
    这篇文章给大家介绍C#中怎么利用AsyncResult实现异步编程,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C#异步编程模式IAsyncResult概述IAsyncResult 异步设计模式通过名为 BeginOp...
    99+
    2023-06-17
  • C#中怎么利用委托实现异步调用
    这篇文章将为大家详细讲解有关C#中怎么利用委托实现异步调用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。委托实现C#异步调用的步骤:定义委托。将要进行异步调用的方法“实例化”到定义的委托。在...
    99+
    2023-06-17
  • Linux下select异步通讯怎么实现
    这篇“Linux下select异步通讯怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起...
    99+
    2023-05-25
    linux select
  • C#之Socket通信怎么实现
    这篇文章主要介绍“C#之Socket通信怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C#之Socket通信怎么实现”文章能帮助大家解决问题。一、socket是什么Socket是应用层与TC...
    99+
    2023-06-30
  • C#中怎么实现异步调用
    C#中怎么实现异步调用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。首先,C#异步调用出来的新线程,必须回收,不回收是浪费资源的可耻行为,.NET也是不允许的,所以你别想钻...
    99+
    2023-06-17
  • Java中怎么实现一个Socket通讯客户端
    Java中怎么实现一个Socket通讯客户端,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java Socket通讯代码 <xml version="...
    99+
    2023-06-17
  • C#中怎么利用异步实现一个进度条效果
    本篇文章给大家分享的是有关C#中怎么利用异步实现一个进度条效果,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。C#进度条实现之异步实例进度条页面://==============...
    99+
    2023-06-17
  • C#中使用async和await实现异步Udp通讯的示例代码
    目录C/S架构客户端实现客户端主流程和实现客户端发送消息实现客户端监听消息实现服务器实现服务器主流程和实现服务器发送消息实现服务器监听消息实现总结在之前的C#版本中, 如果我们想要进...
    99+
    2022-11-13
  • 怎么在C#中利用Task执行异步
    这篇文章将为大家详细讲解有关怎么在C#中利用Task执行异步,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。为什么要使用 Task线程是创建并发的底层工具,因此具有一定的局限性。没有简单的方法...
    99+
    2023-06-14
  • C#中怎么实现异步操作
    C#中怎么实现异步操作,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。//首先准备好,要进行异步的方法(能异步的,***不多线程)  private ...
    99+
    2023-06-17
  • C++中怎么实现异步操作
    C++中怎么实现异步操作,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。实现(代码)#include <iostream> #include&nb...
    99+
    2023-06-17
  • C#中怎么实现同步调用和异步调用
    今天就跟大家聊聊有关C#中怎么实现同步调用和异步调用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C#委托的Invoke方法用来进行同步调用。同步调用也可以叫阻塞调用,它将阻塞当前线...
    99+
    2023-06-17
  • Java中怎么实现 Socket通信
    本篇文章为大家展示了Java中怎么实现 Socket通信,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。长连接、短链接只是针对客户端而言,服务器无所谓长、短;无论同步或者异步通信,发送之后务必要又响应...
    99+
    2023-06-17
  • Python中怎么利用Asyncio实现异步编程
    本篇文章为大家展示了Python中怎么利用Asyncio实现异步编程,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。异步是怎么一回事在传统的顺序编程中, 所有发送给解释器的指令会一条条被执行。此类代码...
    99+
    2023-06-17
  • Ajax中怎么利用XML实现异步提交
    这篇文章给大家介绍Ajax中怎么利用XML实现异步提交,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。第一种方法是xml方法1.首先在jsp页面的JavaScript,这段代码是通用的,...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作