第2章TCP应用编程ppt课件_第1页
第2章TCP应用编程ppt课件_第2页
第2章TCP应用编程ppt课件_第3页
第2章TCP应用编程ppt课件_第4页
第2章TCP应用编程ppt课件_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第第2 2章章 TCPTCP运用编程运用编程 2.1 2.1 同步同步TCPTCP运用编程运用编程 2.2 2.2 利用同步利用同步TCPTCP编写网络游戏编写网络游戏2.3 2.3 异步异步TCPTCP运用编程运用编程 2.4 2.4 异步异步TCPTCP聊天程序聊天程序2 TCP是是Transmission Control Protocol传输控传输控制协议的简称,是制协议的简称,是TCP/IP体系中面向衔接的运体系中面向衔接的运输层协议,在网络中提供全双工的和可靠的效力。输层协议,在网络中提供全双工的和可靠的效力。TCP协议最主要的特点是:协议最主要的特点是: 1) 是一种基于衔接的协

2、议。是一种基于衔接的协议。 2) 保证数据准确到达。保证数据准确到达。 3) 保证各数据到达的顺序与数据发出的顺序一样。保证各数据到达的顺序与数据发出的顺序一样。 4) 传输的数据无音讯边境。传输的数据无音讯边境。3关于关于TCP运用编程的几个概念:运用编程的几个概念:1)同步任务方式同步任务方式 用用TCP协议进展编程时程序执行到发送、协议进展编程时程序执行到发送、接纳和监听语句时,在未完成任务前不再继续接纳和监听语句时,在未完成任务前不再继续往下执行,即处于阻塞形状,直到该语句完成往下执行,即处于阻塞形状,直到该语句完成某个任务后才继续执行下一条语句。某个任务后才继续执行下一条语句。 2)

3、异步任务方式异步任务方式 程序执行到发送、接纳和监听语句时,不程序执行到发送、接纳和监听语句时,不论任务能否完成,都会继续往下执行。论任务能否完成,都会继续往下执行。43)同步套接字编程同步套接字编程 与同步任务方式相对应的,利用与同步任务方式相对应的,利用Socket类进类进展编程时系统提供有相应的方法,采用相应的方展编程时系统提供有相应的方法,采用相应的方法进展编程那么称为同步套接字编程。法进展编程那么称为同步套接字编程。4)异步套接字编程异步套接字编程 与异步任务方式相对应的,利用与异步任务方式相对应的,利用Socket类进类进展编程时系统提供有相应的方法,采用相应的方展编程时系统提供有

4、相应的方法,采用相应的方法进展编程那么称为异步套接字编程法进展编程那么称为异步套接字编程 。 这里的同步这里的同步TCP和异步和异步TCP仅仅指任务方仅仅指任务方式,它和第式,它和第1章引见的线程间的同步不是一个概章引见的线程间的同步不是一个概念。念。52.1 同步同步TCP运用编程运用编程 在同步在同步TCP运用编程中,发送、接纳和监听语运用编程中,发送、接纳和监听语句均采用阻塞方式任务。句均采用阻塞方式任务。 运用同步运用同步TCP编写效力器端程序的普通步骤为:编写效力器端程序的普通步骤为: 1) 创建一个包含采用的网络类型、数据传输类创建一个包含采用的网络类型、数据传输类型和协议类型的本

5、地套接字对象,并将其与效力型和协议类型的本地套接字对象,并将其与效力器的器的IP地址和端口号绑定。此过程可以经过地址和端口号绑定。此过程可以经过Socket类或者类或者TcpListener类完成。类完成。 2) 在指定的端口进展监听,以便接受客户端衔在指定的端口进展监听,以便接受客户端衔接恳求。接恳求。62.1 同步同步TCP运用编程运用编程(续续) 3) 一旦接受了客户端的衔接恳求,就根据客一旦接受了客户端的衔接恳求,就根据客户端发送的衔接信息创建与该客户端对应的户端发送的衔接信息创建与该客户端对应的Socket对象或者对象或者TcpClient对象。对象。 4) 根据创建的根据创建的So

6、cket对象或者对象或者TcpClient对象,对象,分别与每个衔接的客户进展数据传输。分别与每个衔接的客户进展数据传输。 5) 根据传送信息情况确定能否封锁与对方的根据传送信息情况确定能否封锁与对方的连连 接。接。72.1 同步同步TCP运用编程运用编程(续续)运用同步运用同步TCP编写客户端程序的普通步骤为:编写客户端程序的普通步骤为: 1) 创建一个包含传输过程中采用的网络类型、数创建一个包含传输过程中采用的网络类型、数据传输类型和协议类型的据传输类型和协议类型的Socket对象或对象或TcpClient对对象。象。 2) 运用运用Connect方法与远程效力器建立衔接。方法与远程效力器

7、建立衔接。 3) 与效力器进展数据传输。与效力器进展数据传输。 4) 完成任务后,向效力器发送封锁信息,并封锁完成任务后,向效力器发送封锁信息,并封锁与效力器的衔接。与效力器的衔接。82.1.1 运用套接字发送和接纳数据运用套接字发送和接纳数据 效力器与客户端双方建立衔接后,程序中需求效力器与客户端双方建立衔接后,程序中需求先将要发送的数据转换为字节数组,然后运用先将要发送的数据转换为字节数组,然后运用Socket对象的对象的Send方法发送数据,或者运用方法发送数据,或者运用Receive方法接纳数据。方法接纳数据。 92.1.2 运用运用NetworkStream对象发送和接纳数据对象发送

8、和接纳数据 NetworkStream对象专门用于对网络流数据进对象专门用于对网络流数据进展处置。创建了展处置。创建了NetworkStream对象后,就可以直对象后,就可以直接运用该对象接纳和发送数据。例如:接运用该对象接纳和发送数据。例如: NetworkStream networkStream = new NetworkStream(clientSocket );/发送数据发送数据string message = 发送的数据发送的数据;102.1.2 运用运用NetworkStream对象发送和接纳数据续对象发送和接纳数据续byte sendbytes = System.Text.Enc

9、oding.UTF8.GetBytes(message );networkStream.Write(sendbytes ,0, sendbytes.Length );/接纳数据接纳数据byte readbytes = new byte1024;int i = networkStream.Read(readbytes, 0, readbytes.Length); NetworkStream对象的对象的Write方法能保证字节方法能保证字节数数组中的数据全部发送到组中的数据全部发送到TCP发送缓冲区中,其前发送缓冲区中,其前往往值为值为void。 112.1.3 TcpClient与与TcpLis

10、tener类类 在在System.Net.Sockets命名空间下,命名空间下,TcpClient类类与与TcpListener类是两个专门用于类是两个专门用于TCP协议编程的协议编程的类。这两个类封装了底层的套接字,并分别提供了类。这两个类封装了底层的套接字,并分别提供了对对Socket进展封装后的同步和异步操作的方法,降进展封装后的同步和异步操作的方法,降低了低了TCP运用编程的难度。运用编程的难度。 TcpClient类用于衔接、发送和接纳数据。类用于衔接、发送和接纳数据。 TcpListener类那么用于监听能否有传入的衔接恳类那么用于监听能否有传入的衔接恳求。求。122.1.3 Tc

11、pClient与与TcpListener类续类续1. TcpClient类类 TcpClient类归类在类归类在System.Net命名空间下。命名空间下。 利用利用TcpClient类提供的方法,可以经过网类提供的方法,可以经过网络进络进行衔接、发送和接纳网络数据流。该类的构造行衔接、发送和接纳网络数据流。该类的构造函数函数有四种重载方式:有四种重载方式: 131) TcpClient() 该构造函数创建一个默许的该构造函数创建一个默许的TcpClient对象,对象,该对象自动选择客户端尚未运用的该对象自动选择客户端尚未运用的IP地址和端地址和端口号。创建该对象后,即可用口号。创建该对象后,

12、即可用Connect方法与效方法与效力器端进展衔接。例如:力器端进展衔接。例如:142.1.3 TcpClient与与TcpListener类续类续TcpClient tcpClient=new TcpClient();tcpClient.Connect(abcd, 51888); 152) TcpClient(AddressFamily family) 该构造函数创建的该构造函数创建的TcpClient对象也能自动对象也能自动选择客户端尚未运用的选择客户端尚未运用的IP地址和端口号,但是地址和端口号,但是运用运用AddressFamily枚举指定了运用哪种网络协枚举指定了运用哪种网络协议。创

13、建该对象后,即可用议。创建该对象后,即可用Connect方法与效力方法与效力器端进展衔接。例如:器端进展衔接。例如:TcpClient tcpClient = new TcpClient(AddressFamily.InterNetwork);tcpClient.Connect(abcd, 51888);162.1.3 TcpClient与与TcpListener类续类续3) TcpClient(IPEndPoint iep) iep是是IPEndPoint类型的对象,类型的对象,iep指定指定了客户端的了客户端的IP地址与端口号。当客户端的主地址与端口号。当客户端的主机有一个以上的机有一个以

14、上的IP地址时,可运用此构造函地址时,可运用此构造函数选择要运用的客户端主机数选择要运用的客户端主机IP地址。例如:地址。例如:IPAddress address = Dns.GetHostAddresses(Dns.GetHostName();IPEndPoint iep = new IPEndPoint(address0, 51888);TcpClient tcpClient = new TcpClient(iep);tcpClient.Connect(abcd, 51888);172.1.3 TcpClient与与TcpListener类续类续4) TcpClient(string ho

15、stname,int port) 这是运用最方便的一种构造函数。该构造这是运用最方便的一种构造函数。该构造函数可直接指定效力器端域名和端口号,而且函数可直接指定效力器端域名和端口号,而且不需运用不需运用connect方法。客户端主机的方法。客户端主机的IP地址和地址和端口号那么自动选择。例如:端口号那么自动选择。例如:TcpClient tcpClient=new TcpClient(abcd, 51888);182.1.3 TcpClient与与TcpListener类续类续2. TcpListener类类 TcpListener类用于监听和接纳传入的衔接恳类用于监听和接纳传入的衔接恳求。该

16、类的构造函数有:求。该类的构造函数有: 1) TcpListener(IPEndPoint iep) 该构造函数经过该构造函数经过IPEndPoint类型的对象类型的对象在指定在指定的的IP地址与端口监听客户端衔接恳求。地址与端口监听客户端衔接恳求。 2) TcpListener(IPAddress localAddr, int port) 建立一个建立一个TcpListener对象,在参数中直对象,在参数中直接指定本机接指定本机IP地址和端口,并经过指定的本地址和端口,并经过指定的本机机IP地址和端口号监听传入的衔接恳求。地址和端口号监听传入的衔接恳求。192.1.3 TcpClient与与

17、TcpListener类续类续在同步任务方式下,在同步任务方式下, TcpListener类对应的方法:类对应的方法:AcceptTcpClient:在同步阻塞方式下获取并前往一:在同步阻塞方式下获取并前往一个用来接纳和发送数据的套接字对象个用来接纳和发送数据的套接字对象 ;2) AcceptSocket:在同步阻塞方式下获取并前往一个:在同步阻塞方式下获取并前往一个可以用来接纳和发送数据的封装了可以用来接纳和发送数据的封装了Socket的的TcpClient对象对象 ;203) Start:启动监听,其构造函数为:启动监听,其构造函数为: public void Start(int back

18、log) 整型参数整型参数backlog为恳求队列的最大长度,为恳求队列的最大长度,即最多允许的客户端衔接个数;即最多允许的客户端衔接个数;4) Stop:停顿监听恳求,构造函数为:停顿监听恳求,构造函数为: public void Stop();212.1.4 处理处理TCP协议的无音讯边境问题协议的无音讯边境问题 有三种:有三种: 第一种方法是发送固定长度的音讯。该方法适用第一种方法是发送固定长度的音讯。该方法适用于音讯长度固定的场所。于音讯长度固定的场所。 第二种方法是将音讯长度与音讯一同发送。第二种方法是将音讯长度与音讯一同发送。 第三种方法是运用特殊标志分隔音讯。第三种方法是运用特殊

19、标志分隔音讯。 222.2 利用同步利用同步TCP编写网络游戏编写网络游戏 这个略微复杂的这个略微复杂的“吃棋子游戏是利用吃棋子游戏是利用TCP协议和同步套接字以及多线程编写的网络运用程协议和同步套接字以及多线程编写的网络运用程序。详细规那么及功能见课本。序。详细规那么及功能见课本。231.效力器端编程效力器端编程 效力器启动效力后,需求创建一效力器启动效力后,需求创建一个线程专门用于监听玩家的衔接恳求。个线程专门用于监听玩家的衔接恳求。在监听线程中,效力器一旦接受一个衔在监听线程中,效力器一旦接受一个衔接,就创建一个与该玩家对应的线程,接,就创建一个与该玩家对应的线程,用于接纳该玩家发送的信

20、息,并根据该用于接纳该玩家发送的信息,并根据该玩家发送的信息提供相应的效力。玩家发送的信息提供相应的效力。 有多少个玩家衔接,就创建多少有多少个玩家衔接,就创建多少个对应的线程。玩家退出游戏室,其对个对应的线程。玩家退出游戏室,其对应的线程自动终止。应的线程自动终止。 在与每个玩家对应的线程中,效力器收在与每个玩家对应的线程中,效力器收到对应玩到对应玩家发送的字符串信息后,需求解析字符家发送的字符串信息后,需求解析字符串的含义,串的含义,并决议效力器需求的操作。并决议效力器需求的操作。242.2 利用同步利用同步TCP编写网络游戏续编写网络游戏续2.客户端编程客户端编程 客户端与效力器衔接胜利

21、后,需求创客户端与效力器衔接胜利后,需求创建一个接纳线程,用于接纳效力器发送的建一个接纳线程,用于接纳效力器发送的信息。在接纳线程中,客户端收到效力器信息。在接纳线程中,客户端收到效力器发送的字符串信息后,需求解析字符串的发送的字符串信息后,需求解析字符串的含义,并决议需求的操作。含义,并决议需求的操作。 另外,客户端还需求根据效力器发送另外,客户端还需求根据效力器发送的命令,及时更新客户端程序的运转界面的命令,及时更新客户端程序的运转界面 。252.2 利用同步利用同步TCP编写网络游戏续编写网络游戏续3.代码见课本代码见课本262.3 异步异步TCP运用编程运用编程uTcpListener

22、类类u 1) BeginAcceptTcpClient:开场一个异步操作:开场一个异步操作接受一个传入的衔接尝试。接受一个传入的衔接尝试。 u 2) EndAcceptTcpClient:异步接受传入的衔:异步接受传入的衔接尝试并创建新的接尝试并创建新的TcpClient处置远程主机通讯。处置远程主机通讯。uTcpClient类类u 1) BeginConnect:开场一个对远程主机衔接:开场一个对远程主机衔接的异步恳求。的异步恳求。u 2) EndConnect:异步接受传入的衔接尝试。:异步接受传入的衔接尝试。272.3 异步异步TCP运用编程续运用编程续uSocket类类u 1) Beg

23、inReceive:u 开场从衔接的开场从衔接的Socket中异步接纳数据。中异步接纳数据。u 2) EndReceive:u 终了挂起的异步读取。终了挂起的异步读取。u 3) BeginSend: u 将数据异步发送到衔接的将数据异步发送到衔接的Socket。 u 4) EndSend: u 终了挂起的异步发送。终了挂起的异步发送。282.3.1 EventWaitHandle类类 System.Threading命名空间下的命名空间下的EventWaitHandle类,用于在异步操作时控制线程间的同步,即控制类,用于在异步操作时控制线程间的同步,即控制一个或多个线程继续执行或者等待其它线程

24、完成。一个或多个线程继续执行或者等待其它线程完成。也就是,需求同步的线程可以先阻塞当前线程,然也就是,需求同步的线程可以先阻塞当前线程,然后根据后根据Windows操作系统发出的信号,决议是继续操作系统发出的信号,决议是继续阻塞等待其它任务完成,还是不再等待而直接往下阻塞等待其它任务完成,还是不再等待而直接往下执行。执行。292.3.1 EventWaitHandle类续类续uEventWaitHandle类提供的方法有:类提供的方法有:u 1) Reset:将信号的形状设置为非终止形状,即:将信号的形状设置为非终止形状,即不让操作系统发出信号,从而导致等待收到信号不让操作系统发出信号,从而导

25、致等待收到信号才干继续执行的线程阻塞。才干继续执行的线程阻塞。u 2) Set:将事件形状设置为终止形状,这样等待:将事件形状设置为终止形状,这样等待的线程将会收到信号,从而继续执行而不再等待。的线程将会收到信号,从而继续执行而不再等待。u 3) WaitOne:阻塞当前线程,等待操作系统为:阻塞当前线程,等待操作系统为其发出信号,直到收到信号才解除阻塞。其发出信号,直到收到信号才解除阻塞。302.3.1 EventWaitHandle类续类续u操作系统发出信号的方式有两种:操作系统发出信号的方式有两种:u 1) 发一个信号,使某个等待信号的线程解除阻发一个信号,使某个等待信号的线程解除阻塞,

26、继续执行。塞,继续执行。u 2) 发一个信号,使一切等待信号的线程全部解发一个信号,使一切等待信号的线程全部解除阻塞,继续执行。除阻塞,继续执行。312.3.2 AsynCallback委托委托 AsyncCallback委托用于援用异步操作完成时调委托用于援用异步操作完成时调用的回调方法。在异步操作方式下,由于程序可以用的回调方法。在异步操作方式下,由于程序可以在启动异步操作后继续执行其他代码,因此必需有在启动异步操作后继续执行其他代码,因此必需有一种机制,以保证该异步操作完成时能及时通知调一种机制,以保证该异步操作完成时能及时通知调用者。这种机制可以经过用者。这种机制可以经过AsyncCa

27、llback委托实现。委托实现。 异步操作的每一个方法都有一个异步操作的每一个方法都有一个Begin方法和方法和End方法,例如方法,例如BeginAcceptTcpClient和和EndAcceptTcpClient。程序调用。程序调用Begin方法时,方法时,系统会自动在线程池中创建对应的线程进展异步操系统会自动在线程池中创建对应的线程进展异步操作,从而保证调用方和被调用方同时执行,当线程作,从而保证调用方和被调用方同时执行,当线程 322.3.2 AsynCallback委托续委托续 池中的池中的Begin方法执行终了时,会自动经过方法执行终了时,会自动经过AsyncCallback委托

28、调用在委托调用在Begin方法的参数中指方法的参数中指定的回调方法。定的回调方法。 回调方法是在程序中事先定义的,在回调方回调方法是在程序中事先定义的,在回调方法法中,经过中,经过End方法获取方法获取Begin方法的前往值和方法的前往值和一切输入一切输入/输出参数,从而到达异步操作方式下完输出参数,从而到达异步操作方式下完成参数传送的目的。成参数传送的目的。 332.3.3 BeginAcceptTcpClient与与EndAcceptTcpClient方法方法 这两个方法包含在这两个方法包含在System.Net.Sockets命名空间命名空间下的下的TcpListener类中。类中。 在

29、在BeginAcceptTcpClient方法中,系统自动利用方法中,系统自动利用线程池创建需求的线程,同时监听客户端衔接请线程池创建需求的线程,同时监听客户端衔接请求。一旦接受了客户衔接恳求,就自动经过委托调求。一旦接受了客户衔接恳求,就自动经过委托调用提供应委托的方法,并前往形状信息。该方法的用提供应委托的方法,并前往形状信息。该方法的原型为:原型为: public IAsyncResult BeginAcceptTcpClient (AsyncCallback callback, Object state)342.3.3 BeginAcceptTcpClient与与EndAcceptTc

30、pClient方法续方法续 其中:参数其中:参数1为为AsyncCallback类型的委托;参数类型的委托;参数2为为Object类型,用于将形状信息传送给委托提供类型,用于将形状信息传送给委托提供的方法。例如:的方法。例如: AsyncCallback callback = new AsyncCallback(AcceptTcpClientCallback); tcpListener.BeginAcceptTcpClient(callback, tcpListener);352.3.3 BeginAcceptTcpClient与与EndAcceptTcpClient方法续方法续void Ac

31、ceptTcpClientCallback( IAsyncResult ar) 回调代码回调代码 AcceptTcpClientCallback方法中传送的参数只方法中传送的参数只需需一个,而且必需是一个,而且必需是IAsyncResult类型的接口,它表类型的接口,它表示异步操作的形状。系统会自动将该形状信息从示异步操作的形状。系统会自动将该形状信息从关关联的联的BeginAcceptTcpClient方法传送到方法传送到AcceptTcpClientCallback方法。在回调代码中,方法。在回调代码中,必必须调用须调用EndAcceptTcpClient方法完成客户端衔接。方法完成客户端

32、衔接。关键代码为:关键代码为:362.3.3 BeginAcceptTcpClient与与EndAcceptTcpClient方法续方法续void AcceptTcpClientCallback( IAsyncResult ar) TcpListener myListener = (TcpListener)ar.AsyncState; TcpClient client = myListener.EndAcceptTcpClient(ar); 默许情况下,程序执行默许情况下,程序执行BeginAcceptTcpClient方方法后,在该方法前往形状信息之前,不会像同步法后,在该方法前往形状信息之

33、前,不会像同步TCP方式那样阻塞等待客户端衔接,而是继续往下方式那样阻塞等待客户端衔接,而是继续往下执行。执行。372.3.4 BeginConnect与与EndConnect 方法方法 BeginConnect方法和方法和EndConnect方法包含在命方法包含在命名空间名空间System.Net.Sockets下的下的TcpClient类和类和Socket类中类中 。 在异步在异步TCP运用编程中,运用编程中,BeginConnect方法经过方法经过异步方式向远程主机发出衔接恳求。该方法有三种异步方式向远程主机发出衔接恳求。该方法有三种重载的方式,方法原型为:重载的方式,方法原型为: pu

34、blic IAsyncResult BeginConnect(IPAddress address, int port, AsyncCallback requestCallback, Object state);382.3.4 BeginConnect与与EndConnect 方法续方法续public IAsyncResult BeginConnect(IPAddress addresses, int port, AsyncCallback requestCallback, Object state);public IAsyncResult BeginConnect(string host, i

35、nt port, AsyncCallback requestCallback, Object state); 其中其中address为远程主机的为远程主机的IPAddress对象;对象;port为远程主机的端口号;为远程主机的端口号;requestCallback为为AsyncCallback类型的委托;类型的委托;state为包含衔接操作为包含衔接操作的相关信息,当操作完成时,此对象会被传送给的相关信息,当操作完成时,此对象会被传送给requestCallback委托。委托。392.3.4 BeginConnect与与EndConnect 方法续方法续 异步异步BeginConnect方法只

36、需在调用了方法只需在调用了EndConnect方方法之后才算执行终了。因此程序中需求在提供应法之后才算执行终了。因此程序中需求在提供应requestCallback委托调用的方法中调用委托调用的方法中调用TcpClient对象的对象的EndConnect方法。关键代码为:方法。关键代码为:AsyncCallback requestCallback = new AsyncCallback(RequestCallback);tcpClient.BeginConnect(远程主机远程主机IP或域名或域名,远程主机远程主机端口号端口号 , requestCallback, tcpClient); 40

37、2.3.4 BeginConnect与与EndConnect 方法续方法续void RequestCallback(IAsyncResult ar) tcpClient = (TcpClient)ar.AsyncState; client.EndConnect(ar); 在自定义的在自定义的RequestCallback中,经过获取的中,经过获取的状状态信息得到新的态信息得到新的TcpClient类型的对象,并调用类型的对象,并调用EndConnect终了衔接恳求。终了衔接恳求。412.3.5 发送数据发送数据 在异步在异步TCP运用编程中,在本机曾经和远程主机运用编程中,在本机曾经和远程主机

38、建立衔接的前提下,可以用建立衔接的前提下,可以用System.Net.Sockets命命名空间下名空间下NetworkStream类中的类中的BeginWrite方法发方法发送数据。其方法原型为:送数据。其方法原型为: public override IAsyncResult BeginWrite(byte buffer, int offset, int size, AsyncCallback callback, Object state); 其中其中buffer是一组是一组Byte类型的值,用来存放要发类型的值,用来存放要发送的数据。送的数据。offset用来存放发送的数据在发送缓冲用来存放

39、发送的数据在发送缓冲区中的起始位置。区中的起始位置。size用来存放发送数据的字节用来存放发送数据的字节数。数。callback是异步回调类型的委托,是异步回调类型的委托,state包含状包含状态信息。态信息。422.3.5 发送数据续发送数据续 运用运用BeginWrite方法异步发送数据,程序必需创方法异步发送数据,程序必需创建实现建实现AsyncCallback委托的回调方法,并将其名委托的回调方法,并将其名称传送给称传送给BeginWrite方法。在方法。在BeginWrite方法中,方法中,形状信息必需至少包含形状信息必需至少包含NetworkStream对象。程序对象。程序调用调用

40、BeginWrite后,系统自动运用单独的线程来执后,系统自动运用单独的线程来执行指定的回调方法,并在行指定的回调方法,并在EndWrite上不断处于阻上不断处于阻塞形状,直到塞形状,直到NetworkStream对象发送恳求的字节对象发送恳求的字节数或引发异常。关键代码为:数或引发异常。关键代码为:432.3.5 发送数据续发送数据续 NetworkStream stream = tcpClient.GetStream(); byte bytesData = System.Text.Encoding.UTF8.GetBytes(str + rn); stream.BeginWrite(byt

41、esData, 0, bytesData.Length, new AsyncCallback(SendCallback), stream);stream.Flush();442.3.5 发送数据续发送数据续private void SendCallback(IAsyncResult ar) stream.EndWrite(ar); 假设希望在假设希望在BeginWrite方法得到传送的形状方法得到传送的形状信息之前使当前线程即调用信息之前使当前线程即调用BeginWrite方法方法的线程阻塞,可以运用的线程阻塞,可以运用ManualResetEvent对对象象WaitOne方法。并在回调方法中

42、调用方法。并在回调方法中调用Set使当使当前线程继续执行。前线程继续执行。 452.3.6 接纳数据接纳数据 假设本机曾经和远程主机建立了衔接,就可以用假设本机曾经和远程主机建立了衔接,就可以用System.Net.Sockets命名空间下命名空间下NetworkStream类中类中的的BeginRead方法接纳数据。其方法原型为:方法接纳数据。其方法原型为: public override IAsyncResult BeginRead(byte buffer, int offset, int size, AsyncCallback callback, object state); 其中其中buffer为字节数组,存储从为字节数组,存储从NetworkStream读取的数据;读取的数据;offset为为buffer中开场存储数据的位中开场存储数据的位置;置;size为从为从NetworkStream中读取的字节数;中读取的字节数;callback是在是在BeginRead完成时执行的完成时执行的AsyncCallback委委托;托;state包含用户定义的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论