第章协议开发PPT课件.ppt

上传人:优*** 文档编号:127943877 上传时间:2020-04-07 格式:PPT 页数:87 大小:1.20MB
返回 下载 相关 举报
第章协议开发PPT课件.ppt_第1页
第1页 / 共87页
第章协议开发PPT课件.ppt_第2页
第2页 / 共87页
第章协议开发PPT课件.ppt_第3页
第3页 / 共87页
第章协议开发PPT课件.ppt_第4页
第4页 / 共87页
第章协议开发PPT课件.ppt_第5页
第5页 / 共87页
点击查看更多>>
资源描述

《第章协议开发PPT课件.ppt》由会员分享,可在线阅读,更多相关《第章协议开发PPT课件.ppt(87页珍藏版)》请在金锄头文库上搜索。

1、第10章TCP协议开发 10 0引言10 1相关概念10 2定义与获取主机信息10 3同步套接字编程10 4同步套接字开发举例 简单聊天程序10 5使用TcpClient和TcpListener简化TCP编程10 6异步套接字编程10 7异步套接字开发举例10 8小结 10 0引言 1 面向连接的套接字使用TCP协议来建立IP地址端点之间的会话 如图 服务器客户端 10 0引言 10 0引言 10 0引言 2 服务器端编程1 指定IP地址和端口号 IPAddress IPEndPoint IPAddressip IPAddress Parse 127 0 0 1 IPEndPointiep n

2、ewIPEndPoint ip 6788 2 创建套接字Socketsocket newSocket AddressFamily InterNetwork SocketType Stream ProtocolType Tcp 10 0引言 3 套接字与IP端口绑定 Bind4 侦听客户端的请求 Listen5 接收客户端的请求 Accept6 接收客户端发送的信息 Receive 7 向客户端发送信息 Send8 关闭套接字 Close 代码见TcpChatOne 10 0引言 3 服务器端编程需做的特殊处理发送信息使用用户自身触发的事件 但接收对方发来的信息是对方来触发的事件 是不是意味着随

3、时都处于接收状态 类似QQ的聊天 对方何时发来信息是不确定的 如何解决 10 0引言 4 客户端编程1 向服务器端发出请求Connect来处理2 其他处理的方式类似服务器端 10 1基本概念 基本概念 同步套接字在通过Socket进行连接 接收 发送操作时 客户机或服务器会暂停当前工作 处于等待状态 即一直等到有数据时才继续执行下面的语句 同步套接字适用于网络传输量不太大的情况 异步套接字在通过Socket进行连接 接收 发送操作时 客户机或服务器不会暂停当前工作 而是利用callback机制进行连接 接收和发送处理 异步套接字适用于需要在网络上进行大量数据传输的应用程序 10 2定义与获取主

4、机信息 定义主机对象IPEndPoint类IPAddress类获取主机信息Dns类中常用方法Dns GetHostName Dns GetHostByName stringhostname Dns GetHostByAddress address Dns Resolve 1 定义主机对象IPEndPoint类包含应用程序连接到主机上的服务所需的主机和端口信息 通过组合服务的主机IP地址和端口号 IPEndPoint类形成到服务的连接点 常用的方法原型 publicIPEndPoint IPAddressaddress intport 说明 address IP地址port 端口号功能 初始化I

5、PEndPoint类的实例 用法举例 IPAddressmyServerIP newIPAddress Parse 127 0 0 1 IPEndPointmyServer newIPEndPoint myServerIP 13 2 主机解析程序实例 Dns Resolve 的使用usingSystem usingSystem Net publicclassTestFileStream staticvoidMain Console Write 输入主机名或者IP地址 stringstr Console ReadLine IPHostEntryhost Dns Resolve str for i

6、nti 0 i host AddressList Length i Console WriteLine host AddressList i ToString Console WriteLine host HostName Console ReadLine 10 3同步套接字编程 1 服务器端口绑定与监听在服务器与客户机连接传输数据前 服务器需要做以下事情 1 创建一个套接字 2 创建本地IPEndPoint对象 3 使用Bind 方法将所创建的套接字与本地IPEndPoint绑定 4 使用Listen 方法设置套接字为监听模式 5 使用Accept 方法接收客户端连接请求并为客户端创建一个客

7、户端套接字 实现方法usingSystem Net usingSystem Net Sockets IPAddressip IPAddress Parse 127 0 0 1 IPEndPointiep newIPEndPoint ip 6788 Socketsocket newSocket AddressFamily InterNetwork SocketType Stream ProtocolType Tcp socket Bind iep socket Listen 10 最多允许10个客户端同时连接while true SocketclientSocket socket Accept

8、2 客户端建立与服务器的连接客户端在传送数据前 只需要做两件事 1 创建一个套接字 2 使用Socket类的Connect 方法将套接字与远程服务器地址相连 实现方法 IPAddressip IPAddress Parse 202 196 101 246 服务器IPEndPointiep newIPEndPoint ip 6788 Socketsocket newSocket AddressFamily InterNetwork SocketType Stream ProtocolType Tcp socket Connect iep 3 发送数据 1 使用Socket类的Send 方法 2

9、使用NetworkStream类的Write 方法 注意 发送的数据必须为字节数组字节数组的数据并不是直接发送到远程机器上 而是发送到了TCP缓冲区中 该缓冲区默认大小为1024字节 TCP缓冲区 1 使用Socket类的Send 方法对服务器端 可以使用客户端连接时创建的套接字发送数据 例如 byte bytes newbyte 1024 stringmessage 发送的数据 bytes System Text Encoding Unicode GetBytes message intnCount clientSocket Send bytes 0 bytes Length SocketF

10、lags None 说明 Send函数的返回值表示实际发送到TCP缓冲区的字节数 intdataleft bytes Length intstart 0 while dataleft 0 intsen clientSocket Send bytes start dataleft SocketFlags None start sen dataleft sen 2 使用NetworkStream类的Write 方法如果创建了NetworkStream对象 就可以直接使用该对象发送数据 例如 NetworkStreamnetstream newNetworkStream clientSocket s

11、tringmessage 发送的数据 byte bytes System Text Encoding Unicode GetBytes message netstream Write bytes 0 bytes Length 与套接字的Send 方法不同 NetworkStream对象的Write 方法返回值为void 4 接收数据与发送数据相似 接收数据的方法也有两种 1 使用Socket类的Receive方法 2 使用NetworkStream类的Read方法 其用法与发送数据类似 例如 byte message newbyte 1024 NetworkStreamnetstream ne

12、wNetworkStream clientSocket intlen netstream Read message 0 message Length 注意 Read 方法有一个整型的返回值 表明实际从TCP缓冲区中读取了多少字节的数据 这是因为有可能TCP缓冲区还没有接收到远程设备发送过来的指定长度的数据 5 TCP协议的无消息边界问题TCP协议的无消息边界问题TCP协议是无消息边界的 即不能保证来自单个Send方法的数据能被单个Receive方法读取 例 第一次发送 abcdefg第二次发送 1234567接收方接收的数据 第一次接收 abcdefg1234567极端情况下 第一次接收 ab

13、cd第二次接收 efg12第三次接收 34567 TCP协议的无消息边界问题 解决方法 发送固定长度的消息将消息长度与消息一起发送 比如字符串消息前用2个字节表明本次消息长度 使用特殊标记分隔消息 要求消息本身不包括特殊标记符 10 4简单聊天程序 10 4 1服务器端编程 1 开始监听 的Click事件代码privatevoidbuttonStart Click objectsender System EventArgse this buttonStart Enabled false IPAddressip IPAddress Parse this textBoxIp Text IPEndP

14、ointserver newIPEndPoint ip Int32 Parse this textBoxPort Text socket newSocket AddressFamily InterNetwork SocketType Stream ProtocolType Tcp socket Bind server socket Listen 10 clientSocket socket Accept this listBoxState Items Add 与客户 clientSocket RemoteEndPoint ToString 建立连接 thread newThread newTh

15、readStart AcceptMessage thread Start 2 接收消息方法privatevoidAcceptMessage while true try NetworkStreamnetStream newNetworkStream clientSocket byte datasize newbyte 4 netStream Read datasize 0 4 intsize System BitConverter ToInt32 datasize 0 Byte message newbyte size intdataleft size intstart 0 while dat

16、aleft 0 intrecv netStream Read message start dataleft start recv dataleft recv this richTextBoxAccept Rtf System Text Encoding Unicode GetString message Catch this listBoxState Items Add 与客户断开连接 break 3添加 发送信息 的Click事件代码 privatevoidbuttonSend Click objectsender System EventArgse stringstr this richTextBoxSend Rtf inti str Length if i 0 return else i 2 为什么i 2byte datasize newbyte 4 datasize System BitConverter GetBytes i byte sendbytes System Text Encoding Unicode GetBytes str try NetworkStreamne

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号