C#网络编程---第2章 TCP应用编程.ppt
《C#网络编程---第2章 TCP应用编程.ppt》由会员分享,可在线阅读,更多相关《C#网络编程---第2章 TCP应用编程.ppt(50页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
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)根据创建的根据创建的Socket对象或者对象或者TcpClien
6、t对象,对象,分别与每个连接的客户进行数据传输。分别与每个连接的客户进行数据传输。5)根据传送信息情况确定是否关闭与对方的根据传送信息情况确定是否关闭与对方的连连 接。接。72.1 同步同步TCP应用编程应用编程(续续)使用同步使用同步TCP编写客户端程序的一般步骤为:编写客户端程序的一般步骤为:1)创建一个包含传输过程中采用的网络类型、创建一个包含传输过程中采用的网络类型、数据传输类型和协议类型的数据传输类型和协议类型的Socket对象或对象或TcpClient对象。对象。2)使用使用Connect方法与远程服务器建立连接。方法与远程服务器建立连接。3)与服务器进行数据传输。与服务器进行数据
7、传输。4)完成工作后,向服务器发送关闭信息,并关完成工作后,向服务器发送关闭信息,并关闭与服务器的连接。闭与服务器的连接。82.1.1 使用套接字发送和接收数据使用套接字发送和接收数据 服务器与客户端双方建立连接后,程序中需要服务器与客户端双方建立连接后,程序中需要先将要发送的数据转换为字节数组,然后使用先将要发送的数据转换为字节数组,然后使用Socket对象的对象的Send方法发送数据,或者使用方法发送数据,或者使用Receive方法接收数据。方法接收数据。92.1.2 使用使用NetworkStream对象发送和接收数据对象发送和接收数据 NetworkStream对象专门用于对网络流数据
8、进行对象专门用于对网络流数据进行处理。创建了处理。创建了NetworkStream对象后,就可以直接对象后,就可以直接使用该对象接收和发送数据。例如:使用该对象接收和发送数据。例如:NetworkStream networkStream=new NetworkStream(clientSocket);/发送数据发送数据string message=发送的数据发送的数据;102.1.2 使用使用NetworkStream对象发送和接收数据(续)对象发送和接收数据(续)byte sendbytes=System.Text.Encoding.UTF8.GetBytes(message);networ
9、kStream.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与与TcpListener类类 在在System.Net.Sockets命名空间下,命名空间下,TcpClie
10、nt类类与与TcpListener类是两个专门用于类是两个专门用于TCP协议编程的协议编程的类。这两个类封装了底层的套接字,并分别提供了类。这两个类封装了底层的套接字,并分别提供了对对Socket进行封装后的同步和异步操作的方法,降进行封装后的同步和异步操作的方法,降低了低了TCP应用编程的难度。应用编程的难度。TcpClient类用于连接、发送和接收数据。类用于连接、发送和接收数据。TcpListener类则用于监听是否有传入的连接类则用于监听是否有传入的连接请求。请求。122.1.3 TcpClient与与TcpListener类(续)类(续)1.TcpClient类类 TcpClient
11、类归类在类归类在System.Net命名空间下。命名空间下。利用利用TcpClient类提供的方法,可以通过网络进类提供的方法,可以通过网络进行连接、发送和接收网络数据流。该类的构造函数行连接、发送和接收网络数据流。该类的构造函数有四种重载形式:有四种重载形式:131)TcpClient()该构造函数创建一个默认的该构造函数创建一个默认的TcpClient对象,对象,该对象自动选择客户端尚未使用的该对象自动选择客户端尚未使用的IP地址和端口号。地址和端口号。创建该对象后,即可用创建该对象后,即可用Connect方法与服务器端进方法与服务器端进行连接。例如:行连接。例如:142.1.3 TcpC
12、lient与与TcpListener类(续)类(续)TcpClient tcpClient=new TcpClient();tcpClient.Connect(,51888);152)TcpClient(AddressFamily family)该构造函数创建的该构造函数创建的TcpClient对象也能自动选对象也能自动选择客户端尚未使用的择客户端尚未使用的IP地址和端口号,但是使用地址和端口号,但是使用AddressFamily枚举指定了使用哪种网络协议。创枚举指定了使用哪种网络协议。创建该对象后,即可用建该对象后,即可用Connect方法与服务器端进行方法与服务器端进行连接。例如:连接。例
13、如:TcpClient tcpClient=new TcpClient(AddressFamily.InterNetwork);tcpClient.Connect(,51888);162.1.3 TcpClient与与TcpListener类(续)类(续)3)TcpClient(IPEndPoint iep)iep是是IPEndPoint类型的对象,类型的对象,iep指定了客指定了客户端的户端的IP地址与端口号。当客户端的主机有一个地址与端口号。当客户端的主机有一个以上的以上的IP地址时,可使用此构造函数选择要使用地址时,可使用此构造函数选择要使用的客户端主机的客户端主机IP地址。例如:地址。
14、例如:IPAddress address=Dns.GetHostAddresses(Dns.GetHostName();IPEndPoint iep=new IPEndPoint(address0,51888);TcpClient tcpClient=new TcpClient(iep);tcpClient.Connect(,51888);172.1.3 TcpClient与与TcpListener类(续)类(续)4)TcpClient(string hostname,int port)这是使用最方便的一种构造函数。该构造函数这是使用最方便的一种构造函数。该构造函数可直接指定服务器端域名和端口
15、号,而且不需使用可直接指定服务器端域名和端口号,而且不需使用connect方法。客户端主机的方法。客户端主机的IP地址和端口号则自地址和端口号则自动选择。例如:动选择。例如:TcpClient tcpClient=new TcpClient(,51888);182.1.3 TcpClient与与TcpListener类(续)类(续)2.TcpListener类类 TcpListener类用于监听和接收传入的连接请求。类用于监听和接收传入的连接请求。该类的构造函数有:该类的构造函数有:1)TcpListener(IPEndPoint iep)该构造函数通过该构造函数通过IPEndPoint类型的
16、对象在指定类型的对象在指定的的IP地址与端口监听客户端连接请求。地址与端口监听客户端连接请求。2)TcpListener(IPAddress localAddr,int port)建立一个建立一个TcpListener对象,在参数中直接指对象,在参数中直接指定本机定本机IP地址和端口,并通过指定的本机地址和端口,并通过指定的本机IP地址和地址和端口号监听传入的连接请求。端口号监听传入的连接请求。192.1.3 TcpClient与与TcpListener类(续)类(续)在同步工作方式下,在同步工作方式下,TcpListener类对应的方法:类对应的方法:1)AcceptTcpClient:在同
17、步阻塞方式下获取并返:在同步阻塞方式下获取并返回一个用来接收和发送数据的套接字对象回一个用来接收和发送数据的套接字对象;2)AcceptSocket:在同步阻塞方式下获取并返回:在同步阻塞方式下获取并返回一个可以用来接收和发送数据的封装了一个可以用来接收和发送数据的封装了Socket的的TcpClient对象对象;203)Start:启动监听,其构造函数为:启动监听,其构造函数为:public void Start(int backlog)整型参数整型参数backlog为请求队列的最大长度,为请求队列的最大长度,即最多允许的客户端连接个数;即最多允许的客户端连接个数;4)Stop:停止监听请求
18、,构造函数为:停止监听请求,构造函数为:public void Stop();212.1.4 解决解决TCP协议的无消息边界问题协议的无消息边界问题 有三种:有三种:第一种方法是发送固定长度的消息。该方法适用第一种方法是发送固定长度的消息。该方法适用于消息长度固定的场合。于消息长度固定的场合。第二种方法是将消息长度与消息一起发送。第二种方法是将消息长度与消息一起发送。第三种方法是使用特殊标记分隔消息。第三种方法是使用特殊标记分隔消息。222.2 利用同步利用同步TCP编写网络游戏编写网络游戏 这个稍微复杂的这个稍微复杂的“吃棋子吃棋子”游戏是利用游戏是利用TCP协议和同步套接字以及多线程编写的
19、网络应用程协议和同步套接字以及多线程编写的网络应用程序。具体规则及功能见课本。序。具体规则及功能见课本。231.服务器端编程服务器端编程 服务器启动服务后,需要创建一个线程专门用服务器启动服务后,需要创建一个线程专门用于监听玩家的连接请求。在监听线程中,服务器一于监听玩家的连接请求。在监听线程中,服务器一旦接受一个连接,就创建一个与该玩家对应的线程,旦接受一个连接,就创建一个与该玩家对应的线程,用于接收该玩家发送的信息,并根据该玩家发送的用于接收该玩家发送的信息,并根据该玩家发送的信息提供相应的服务。信息提供相应的服务。有多少个玩家连接,就创建多少个对应的线程。有多少个玩家连接,就创建多少个对
20、应的线程。玩家退出游戏室,其对应的线程自动终止。玩家退出游戏室,其对应的线程自动终止。在与每个玩家对应的线程中,服务器收到对应玩在与每个玩家对应的线程中,服务器收到对应玩家发送的字符串信息后,需要解析字符串的含义,家发送的字符串信息后,需要解析字符串的含义,并决定服务器需要的操作。并决定服务器需要的操作。242.2 利用同步利用同步TCP编写网络游戏(续)编写网络游戏(续)2.客户端编程客户端编程 客户端与服务器连接成功后,需要创建一个客户端与服务器连接成功后,需要创建一个接收线程,用于接收服务器发送的信息。在接收接收线程,用于接收服务器发送的信息。在接收线程中,客户端收到服务器发送的字符串信
21、息后,线程中,客户端收到服务器发送的字符串信息后,需要解析字符串的含义,并决定需要的操作。需要解析字符串的含义,并决定需要的操作。另外,客户端还需要根据服务器发送的命令,另外,客户端还需要根据服务器发送的命令,及时更新客户端程序的运行界面及时更新客户端程序的运行界面。252.2 利用同步利用同步TCP编写网络游戏(续)编写网络游戏(续)3.代码见课本代码见课本262.3 异步异步TCP应用编程应用编程uTcpListener类类 1)BeginAcceptTcpClient:开始一个异步操作:开始一个异步操作接受一个传入的连接尝试。接受一个传入的连接尝试。2)EndAcceptTcpClien
22、t:异步接受传入的连:异步接受传入的连接尝试并创建新的接尝试并创建新的TcpClient处理远程主机通处理远程主机通信。信。uTcpClient类类 1)BeginConnect:开始一个对远程主机连接:开始一个对远程主机连接的异步请求。的异步请求。2)EndConnect:异步接受传入的连接尝试。:异步接受传入的连接尝试。272.3 异步异步TCP应用编程(续)应用编程(续)uSocket类类 1)BeginReceive:开始从连接的开始从连接的Socket中异步接收数据。中异步接收数据。2)EndReceive:结束挂起的异步读取。结束挂起的异步读取。3)BeginSend:将数据异步发
23、送到连接的将数据异步发送到连接的Socket。4)EndSend:结束挂起的异步发送。结束挂起的异步发送。282.3.1 EventWaitHandle类类 System.Threading命名空间下的命名空间下的EventWaitHandle类,用于在异步操作时控制线程间的同步,即控制类,用于在异步操作时控制线程间的同步,即控制一个或多个线程继续执行或者等待其它线程完成。一个或多个线程继续执行或者等待其它线程完成。也就是,需要同步的线程可以先阻塞当前线程,然也就是,需要同步的线程可以先阻塞当前线程,然后根据后根据Windows操作系统发出的信号,决定是继续操作系统发出的信号,决定是继续阻塞等
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C#网络编程-第2章 TCP应用编程 C# 网络 编程 TCP 应用
限制150内