千家信息网

C#异步通信的示例分析

发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,这篇文章主要为大家展示了"C#异步通信的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"C#异步通信的示例分析"这篇文章吧。C#异步通信概念及应用的
千家信息网最后更新 2025年02月05日C#异步通信的示例分析

这篇文章主要为大家展示了"C#异步通信的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"C#异步通信的示例分析"这篇文章吧。

C#异步通信概念及应用的认识首先让我们来看看:在网络编程中运用Socket,常常需要长期监听某个端口,以获得Socket连接,进而执行相关操作。

但此时,主线程就会被阻塞,无法做其他事情。为了解决这类问题,Socket类中提供了一些支持异步操作的方法,如表17-10所示。

下表为Socket类中支持异步操作的方法

BeginAccept()

开始一个异步请求,以创建一个新的Socket对象来接受传入的连接请求

EndAccept()

结束一个异步请求,以创建一个新的Socket对象来接受传入的连接请求

BeginConnect()

开始一个对远程主机的异步请求

EndConnect()

结束一个对远程主机的异步请求

BeginDisconnect()

开始异步请求从远程主机断开连接

EndDisconnect()

结束从远程主机断开连接的异步请求

BeginReceive()

开始从连接的Socket中异步接收数据

EndReceive()

结束从连接的Socket中异步接收数据

BeginReceiveFrom()

开始从指定网络设备中异步接收数据

EndReceiveFrom()

结束从指定网络设备中异步接收数据

BeginSend()

开始将数据异步发送到连接的Socket

EndSend()

结束数据的异步发送

BeginSendFile()

开始将文件异步发送到连接的Socket

EndSendFile()

结束文件的异步发送

BeginSendTo()

向特定的远程主机异步发送数据

EndSendTo()

结束对远程主机数据的异步发送

从上表中可以看出,这些方法都是成对出现的。这些方法能避免网络通信中的阻塞现象。这些方法的使用机制是在Begin开头的方法中注册一个回调函数,当对应的事件发生时,调用该回调函数,且在回调函数中调用对应的End开头的方法。

下面以BeginAccept()和EndAccept()为例,说明异步方法的用法。BeginAccept()的声明如下所示。

public IAsyncResult BeginAccept(AsynCallback callback,  object state);

其中,***个参数是异步委托AsynCallb了ack,state包含此请求的状态信息的对象。

EndAccept()方法具有三种重载形式,如下所示。

public Socket EndAccept(IAsyncResult asynresult);   public Socket EndAccept(out byte[] buffer,  IAsyncResult asynresult);   public Socket EndAccept(out byte[] buffer,  out int bytesTransferred, IAsyncResult asynresult,);

asynresult用于存储此异步操作的状态信息及任何用户定义的数据;buffer表示需要传输的字节数据;

bytesTransferred表示已经传输的字节数。这里的out参数与ref的用法类似,均表示传递引用。它们的区别是ref是传递参数的地址,out是返回值。

具体用法如下所示。

private AsyncCallback callbackOnAccpt; //定制回调方法   private Socket s;   ……  //C#异步通信 s=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);   callbackAccpt = new AsyncCallback(this.OnAccept);//实例化回调方法   s.BeginAccept(callbackOnAccpt, this.s); //开始异步请求   ……   private void OnAccept(IAsyncResult asynresult)   {   //C#异步通信……   s.EndAccept(asynresult); //结束异步请求   ……   }

BeginConnect()和EndConnect()用于对远程主机的异步连接请求。BeginConnect()的声明如下所示。

public IAsyncResult BeginConnect(EndPoint remoteEP,  AsyncCallback callback, object state);   public IAsyncResult BeginConnect(IPAddress address,  int port,AsyncCallback requestedcallback,object state);   public IAsyncResult BeginConnect(IPAddress[] address,  int port,AsyncCallback requestedcallback,object state);   //C#异步通信public IAsyncResult BeginConnect(string host,int port,  AsyncCallback requestedcallback,object state);

它的每个重载形式均含有AsyncCallback参数,这是这类Begin开头的方法的特点;remoteEP表示远程主机的IP和端口。

EndConnect()的声明如下所示。

public Socket EndConnect(IAsyncResult asynresult);

它的参数的意义和EndAccept()完全一致。

BeginSend()表示开始将数据异步发送到连接的Socket,它最常用的声明如下所示。

public IAsyncResult BeginSend(byte[] buffer,  int offset,int size,SocketFlags socketFlags,   AsyncCallback callback,object state);

Buffer表示要发送的数据,offset表示buffer中发送数据的位置,size为发送字节数的大小,socketFlags指SocketFlags值的按位组合。

EndSend()的声明如下所示。

public Socket EndSend(IAsyncResult asynresult);

BeginReceive()表示开始从连接的Socket中异步接收数据,它的常见声明如下所示。

public IAsyncResult BeginReceive(byte[] buffer,  int offset,int size,SocketFlags socketFlags,   AsyncCallback callback,object state);

它的参数和BeginSend()是完全一致的,这里不再赘述。

EndReceive()的声明如下所示。

public Socket EndReceive(IAsyncResult asynresult);

C#异步通信之Socket中异步通信的实现要远比同步困难,这里不再举例。简单地说,在同步中,主线程如果调用一个方法,那么主线程必须等到方法线程执行完才能继续往下执行。因此,主线程和方法线程的执行是串行的。而在异步中,两者能同时执行,它们的执行是并行的。

以上是"C#异步通信的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

方法 数据 通信 主机 参数 线程 C# 网络 示例 分析 内容 函数 字节 对象 开头 篇文章 一致 信息 形式 文件 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 服务器内存条频率怎么调 5U服务器机箱能装什么主板 如何查看服务器有什么模块 软件开发对公司的评价怎么写 安装金蝶服务器要选择客户端吗 深圳易航软件开发有限公司 学软件开发那一块比较好 软件开发用树形目录节点 心动网络安全ppt 长宁区网络技术服务公司 哈密新华互联网科技行情 如何将不同服务器设置同一个网关 小学生网络安全相关知识 路北区项目网络技术答疑解惑 教资报名注册显示内部服务器错误 内网写入数据库通讯安全 网站建设服务器托管策划公司 数据库表怎样设计约束条件 服务器异步调用 海康数据管理服务器 混沌理论和软件开发的关系 软件开发设计报告模板 辅警网络安全什么写 郑州视讯网络技术有限公司 岩板生产加工销量软件开发 微信正在获取同步数据库 银行软件开发中心重庆中心在哪里 软件开发测试产品搞笑图片 中国网络安全法的意义 把服务器放在空调外机位置
0