第3章TCP网络程序开发案例.ppt

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3.3.1 异步程序编程方法 1.BeginAcceptTcpClient方法和EndAcceptTcpClient方法 回调方法中传递的参数只有一个,而且必须是IAsyncResult类型的接口,它表示异步操作的状态,如果有多个状态需要传递,可以将其事先封装到某个类中 AsyncCallback callback = new AsyncCallback(AcceptClient); tcpListener.BeginAcceptTcpClient(callback, tcpListener); …. void AcceptClient( IAsyncResult ar) { … TcpListener myListener = (TcpListener)ar.AsyncState; TcpClient client = myListener.EndAcceptTcpClient(ar); … } 3.3.1 异步程序编程方法 1.BeginAcceptTcpClient方法和EndAcceptTcpClient方法 程序执行BeginAcceptTcpClient方法后,会立即在线程池中自动创建一个线程,同时在该线程中监听客户端连接请求。一旦接受了客户端连接请求,就通过委托执行相应的方法,并返回状态信息。 public IAsyncResult BeginAcceptTcpClient(AsyncCallback callback, Object state) 参数1:AsyncCallback类型的委托, 参数2:Object类型,用于将状态信息传递给委托调用的方法。 3.3.1 异步程序编程方法 2.BeginConnect方法和EndConnect方法 在BeginConnect方法操作完成前,调用该方法的线程不会阻塞,系统会自动用独立的线程来执行该方法,直到与远程主机连接成功或抛出异常。 public IAsyncResult BeginConnect(IPAddress address, int port, AsyncCallback requestCallback, Object state); 参数:address为远程主机的IPAddress对象; port为远程主机的端口号; requestCallback为AsyncCallback类型的委托; state为包含连接操作的相关信息,当操作完成时,此对象会被传递给requestCallback委托。 3.3.1 异步程序编程方法 2.BeginConnect方法和EndConnect方法 … AsyncCallback requestCallback = new AsyncCallback(FinishConnect); tcpClient.BeginConnect(远程主机IP或域名,远程主机端口号, requestCallback, tcpClient); … void FinishConnect (IAsyncResult ar) { … tcpClient = (TcpClient)ar.AsyncState; client.EndConnect(ar); … } 在自定义的FinishConnect方法中,通过获取的状态信息得到新的TcpClient 类型的对象,并调用EndConnect完成连接请求。 3.3.1 异步程序编程方法 3.异步发送和接收数据 public override IAsyncResult BeginWrite(byte[ ] buffer, int offset, int size, AsyncCallback callback, Object state); public override IAsyncResult BeginRead(byte[ ] buffer, int offset, int size, AsyncCallback callback, Object state); (1)buffer为字节数组,表示用来存放要发送的数据,从NetworkStream读取的数据; (2)offset用来存放发送或读取的数据在缓冲区中的起始位置; (3)size用来存放发送或接收数据的字节数; (4)callback是异步回调类型的委托 (5)state包含状态信息。 3.3.2 界面设计 服务器端 客户端 3.3.3 服务器端程序编写 1.在监听类中声明一个委托ReceiveMessageDelegate用来

文档评论(0)

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

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

1亿VIP精品文档

相关文档