已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C 网络通信程序设计 第3TCP协议的程序设计 2 本章的主要内容 学习内容 1 了解TCP协议的特点与数据包格式 2 理解阻塞模式和非阻塞模式的特点及其应用 3 掌握同步套接字编程和异步套接字编程方法 4 掌握TcpListener和TcpClient的综合应用方法 学习目标 1 掌握基于TCP协议的同步 异步套接字编程方法 2 学会基于C S结构的网络聊天程序设计与实现能力 3 4 1TCP协议介绍 1 TCP协议提供服务的特点 面向连接的传输 端到端的通信 高可靠性 确保传输数据的正确性 不出现丢失或乱序 全双工方式传输 采用字节流方式 即以字节为单位传输字节序列 紧急数据传送功能 4 2 TCP数据包格式 注意标志位的作用注意选项的作用 如何使用选项部分 5 3 TCP协议的通信特点 3次握手 4次挥手 回顾拥塞控制 1 26 2020 6 4 TCP的常见端口 7 4 2阻塞模式 非阻塞模式 同步异步阻塞模式 读 写 连接 接收非阻塞模式 8 4 2 1阻塞模式的效率提升方法 1 超时控制方法套接字选项设置 SetSockOption GetSockOption 应用示例 SocketsocketTimeout newSocket AddressFamily InterNetwork SocketType Dgram ProtocolType Udp IPEndPointmyHost newIPEndPoint IPAddress Any 8080 socketTimeout SetSocketOption SocketOptionLevel Socket SocketOptionName ReceiveTimeout 3000 定时器 9 2 套接字多路复用方法 C 使用Socket类提供的Select方法 应用示例 ArrayListsocketList newArrayList 5 socketList Add sock1 socketList Add sock2 Socket Select socketList null null 1000 Byte buffer newtype 1024 for inti 0 i socketList Length 1 i socketList i Receive buffer Console WriteLine System Text Encoding ASCII GetString buffer 这样 Select方法将监视sock1和sock2两个套接字上接收的数据 10 3 调用异步选择函数AsyncSelect 在VC 编程环境中使用 对于winsock2 0 采用 WSAAsyncSelect 函数 11 4 2 2非阻塞模式的应用 1 非阻塞套接字Socketsock newSocket AddressFamily InterNetwork SocketType Stream ProtocolType Tcp sock Blocking false 2 异步套接字采用异步回调AsyncCallback 委托为应用程序提供完成异步操作 12 4 3同步套接字编程技术 常规的网络聊天程序 相互发送文字信息 服务器监听 网络接收数据 数据发送 客户机发出连接请求 数据发送与接收 13 服务器 开始监听 的主要代码 this btnStartListen Enabled false IPAddressip IPAddress Parse this textBoxIP Text IPEndPointserver newIPEndPoint ip Int32 Parse this textBoxPort Text socket newSocket AddressFamily InterNetwork SocketType Stream ProtocolType Tcp socket Bind server 监听客户端连接socket Listen 10 newSocket socket Accept 显示客户IP和端口号this lbState Items Add 与客户 newSocket RemoteEndPoint ToString 建立连接 创建一个线程接收客户信息thread newThread newThreadStart AcceptMessage thread Start 14 服务器 数据接收 的主要代码 NetworkStreamnetStream newNetworkStream newSocket byte datasize newbyte 4 netStream Read datasize 0 4 intsize System BitConverter ToInt32 datasize 0 Byte message newbyte size intdataleft size intstart 0 while dataleft 0 intrecv netStream Read message start dataleft start recv dataleft recv 接收数据的方法有2种 使用Socket类的Receive方法使用NetworkStream类的Read方法 Read方法的返回值是一个整数 表明实际从TCP缓冲区中读取的字节数 可能少于远端发来的数据量 15 服务器 数据发送 的主要代码 发送数据也有2种方法 使用Socket类的Send方法 应用示例 byte bytes newbyte 2048 stringmessage 测试数据发送 bytes System Text Encoding Unicode GetBytes message newSocket Send bytes bytes Length SocketFlags None 使用NetworkStream类的Write方法 能够保证将用户数据全部发送到TCP缓冲区中 自动完成 不需要用户管理 简化了编程工作 stringstr this rtbSend Rtf inti str Length byte datasize newbyte 4 datasize System BitConverter GetBytes i 将位整数值转换为字节数组byte sendbytes System Text Encoding Unicode GetBytes str NetworkStreamnetStream newNetworkStream newSocket netStream Write datasize 0 4 netStream Write sendbytes 0 sendbytes Length netStream Flush this rtbSend Rtf 16 客户机 连接请求 的主要代码 IPAddressip IPAddress Parse this tbIP Text IPEndPointserver newIPEndPoint ip Int32 Parse this tbPort Text socket newSocket AddressFamily InterNetwork SocketType Stream ProtocolType Tcp try socket Connect server catch MessageBox Show 与服务器连接失败 return this btnRequest Enabled false this lbState Items Add 与服务器连接成功 Threadthread newThread newThreadStart AcceptMessage thread Start 1 26 2020 17 4 4异步套接字编程技术 18 1 客户机发出连接请求 客户端使用BeginConnect方法发出连接请求给服务器 Socketsocket newSocket AddressFamily InterNetwork SocketType Stream ProtocolType Tcp IPEndPointiep newIPEndPoint IPAddress Parse 127 0 0 1 8000 socket BeginConnect iep newAsyncCallback ConnectServer socket privatevoidConnectServer IAsyncResultar clientSocket Socket ar AsyncState clientSocket EndConnect ar clientSocket BeginReceive data 0 dataSize SocketFlags None newAsyncCallback ReceiveData clientSocket 19 2 服务器接收连接请求 privateSocketserverSocket newSocket IPHostEntrymyHost newIPHostEntry myHost Dns GetHostByName NetHost 主机名称NetHostIPAddressmyIP IPAddress Parse myHost AddressList 0 ToString 选取第1个地址IPEndPointiep newIPEndPoint myIP 8000 serverSocket newSocket AddressFamily InterNetwork SocketType Stream ProtocolType Tcp serverSocket Bind iep serverSocket Listen 5 监听队列为5 开始异步接收连接请求serverSocket BeginAccept newAsyncCallback AcceptConnection serverSocket 20 3 服务器发送和接收数据 一旦服务器接收到一个客户机连接请求 AsyncCallback委托将自动调用AcceptConnection方法 privatevoidAcceptConnection IAsyncResultar SocketmyServer Socket ar AsyncState 异步接收传入的连接 并创建新的Socket来处理远程主机通信newSocket myServer EndAccept ar byte message System Text Encoding Unicode GetBytes 客户你好 newSocket BeginSend message 0 message Length SocketFlags None newAsyncCallback SendData newSocket 21 SendData方法 当套接字准备好发送的数据时 会自动调用SendData方法 EndSend方法用于完成数据发送 并返回成功发送的字节数 该段程序示例如下 privatevoidSendData IAsyncResultar Socketclient Socket ar AsyncState try newSocket EndSend ar client BeginReceive data 0 dataSize SocketFlags None newAsyncCallback ReceiveData client 异步接收数据 catch client Close serverSocket BeginAccept newAsyncCallback AcceptConnection serverSocket 开始异步接收新的连接请求 22 课堂思考 如何图形化描述以上异步套接字各种状态之间的状态变化 如状态转换图 23 4 5基于TcpClient类和TcpListener类的编程 TcpClient类和TcpListener类是构建于Socket之上 提供了更高抽象级别的TCP服务 便于程序员快速编写网络程序 TcpClient类用于客户机 TcpListener类用于服务器 24 1 TcpClient类的使用方法 第1 2阶段 方法1 先创建 后连接 创建TcpClient实例TcpClientclient newTcpClient 向服务器发出连接请求client Connect 8000 方法2 直接指定和连接服务器 TcpClientclient newTcpClient 8000 方法3 指定IPEndPoint的方式 IPEndPointlocalEndPoint newIPEndPoint IPAddress Parse 192 168 0 88 8010 TcpClientclient newTcpClient localEndPoint client Connect 8000 4个阶段 创建实例 连接服务器 收发数据和关闭连接 25 1 TcpClient类的使用方法 第三阶段 数据接收netStream client GetStream sr newStreamReader netStream System Text Encoding Unicode str sr ReadLine Console WriteLine str 第三阶段 数据发送ws client GetStream ws Write data 0 data Length 或者sw newStreamWriter ws System Text Encoding Unicode sw WriteLine str sw Flush 第4阶段 连接关闭client Close 4个阶段 创建实例 连接服务器 收发数据和关闭 26 2 TcpListener类的使用方法 TcpListener类用于监听和接收传入的连接请求 包括创建实例 监听连接 接收连接请求 收发数据和停止服务共5个阶段 典型用法如下 IPAddresslocalAddress Dns Resolve Dns GetHostName AddressList 0 IPEndPointlocalEndPoint newIPEndPoint
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度企业培训与人才发展服务合同
- 2024年度影视制作与版权购买合同
- 2024年度碳排放交易:某环保企业与地方政府之间的碳排放权交易合同
- 2024年度0KV配网工程施工安全协议
- 2024年度安居工程EPC建设合同
- 04版0KV变电站电气设备采购合同
- 2024年度4S店汽车销售与供应商战略合作合同
- 2024年度文化传媒公司股权转让合同
- 2024年度跨境电商平台运营合同
- 2024企业招标承包经营合同模板样本
- IMDS操作步骤
- 柴油购销合同模板
- 电缆售后服务的承诺书
- 密封件定位套工艺及钻Φ13孔夹具设计说明书
- (完整版)遴选答题纸(A4纸直接打印)
- 大物实验思考题
- 循证教学评价:数智化时代下高校教师教学评价的新取向
- 《各种管道的护理》PPT课件.ppt
- EDQM分析方法验证指导原则
- 商城开发合同
- 220千伏变电站现场运行通用规程
评论
0/150
提交评论