第4章 TCP编程.ppt

  1. 1、本文档共43页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章 TCP编程.ppt

4.3.2 基于IAsync的异步设计模式(2) 4.3 TCP异步编程 IAsyncResult 接口 public?interface?IAsyncResult ? { ? object?AsyncState?{?get;?} ? WaitHandle?AsyncWaitHandle?{?get;?} ? bool?CompletedSynchronously?{?get;?} ? bool?IsCompleted?{?get;?} ? }? 开始异步操作后如果要阻止应用程序,可以直接调用 End 方法,这会阻止应用程序直到异步操作完成后再继续执行。也可使用 IAsyncResult 的 AsyncWaitHandle 属性,调用其中的WaitOne等方法来阻塞线程。这两种方法的区别不大,只是前者必须一直等待而后者可以设置等待超时。 ???如果不阻止应用程序,可以通过轮循 IAsyncResult 的 IsCompleted 状态来判断操作是否完成,或使用 AsyncCallback 委托来结束异步操作。AsyncCallback 委托包含一个 IAsyncResult 的签名,回调方法内部再调用 End 方法来获取操作执行结果。 4.3.2 基于IAsync的异步设计模式(3) 4.3 TCP异步编程 4.3 TCP异步编程 AsyncCallback委托 用于引用异步操作完成时调用的回调方法。在异步操作方式下,由于程序可以在启动异步操作后继续执行其他代码,因此必须有一种机制,以保证该异步操作完成时能及时通知调用者。这种机制可以通过AsyncCallback 委托实现。 4.3.2 基于IAsync的异步设计模式(4) 回调方法是在程序中事先定义的,在回调方法中,通过End…方法获取Begin…方法的返回值和所有输入/输出参数,从而达到异步操作方式下完成参数传递的目的。 异步操作中,程序调用Begin…方法时,系统会自动在线程池中创建对应的线程进行异步操作,从而保证调用方和被调用方同时执行,当线程池中的Begin…方法执行完毕时,会自动通过AsyncCallback委托调用在Begin…方法的参数中指定的回调方法。 4.3 TCP异步编程 4.3.2 基于IAsync的异步设计模式(5) 4.3 TCP异步编程 BeginAcceptTcpClient与EndAcceptTcpClient方法 System.Net.Sockets.TcpListener类。 AsyncCallback callback = new AsyncCallback(AcceptTcpClientCallback); tcpListener.BeginAcceptTcpClient(callback, tcpListener); … void AcceptTcpClientCallback( IAsyncResult ar) { …… TcpListener myListener = (TcpListener)ar.AsyncState; TcpClient client = myListener.EndAcceptTcpClient(ar); …… } 4.3 TCP异步编程 BeginConnect 与EndConnect 方法 System.Net.Sockets.TcpClient类。 AsyncCallback requestCallback = new AsyncCallback(RequestCallback); tcpClient.BeginConnect(IP,port,requestCallback,tcpClient); … void RequestCallback( IAsyncResult ar) { …… tcpClient = (TcpClient)ar.AsyncState; tcpClient.EndConnect(ar); …… } 4.3 TCP异步编程 发送数据BeginWrite方法与EndWrite方法 System.Net.Sockets.NetworkStream类。 NetworkStream stream=tcpClient.GetStream(); … byte[] bData=System.Text.Encoding.Utf8 .GetBytes(str+”\r\n”); stream.BeginWrite(bData,0,bData.Length,new Asy

您可能关注的文档

文档评论(0)

cnsg + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档