已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
用用 PB 编写编写 WinSock TCP IP 应用程序应用程序 PB 中的套接字是通过 Winsock pbl 库来提供的 它封装了套接字编程中用到的数据结 构和过程 在功能上类似于 VB 中的 Winsock 控件 Winsock pbl 中定义了两种类型的 Socket 流式 Socket 和数据报式 Socket 流式 Socket 需要连接到另一个处于监听状态的流式 Socket 后才能进行通信 是基于连接的 其可靠性高 数据报式 Socket 无需建立连接 源主机发出的报文在网络中经过存储转 发后到达目的主机 效率高但可靠性低 编程时 根据应用环境和需求选择其中一种 若通信子网相当可靠 可考虑采用数据报式 Socket 图 1 用 PB 编写 WinSock TCP IP 应用程序的第一步是将 Winsock pbl 加到应用程序中 然后声明如下全局变量 Winsock ws Boolean b tcp active 用于检验 ws 是否初始化成功 PowerObject gpo null 全局空对象 在应用程序的 Open 事件加入下列代码 ws Create Winsock 初始化 Winsock 的一个实例 SetNull gpo null ws 的函数中用到空对象 gpo null 在应用程序的 Close 事件加入下列代码 图 2 Destroy ws 销毁 ws 对象 完成以上工作后 就可以着手编程了 下面介绍如何利用 Socket 进行通信 1 用数据报式 Socket 向本机的 7 号端口发送数据 TCP 和 UDP 协议规定了传输层端口的长度为 16 比特 因此 TCP 和 UDP 软件可 以使用 216 个不同的端口进行通信 尽管如此 编程时最好不要使用前 1024 个端口 因为这个范围内很多是专用端口 如 21 为 FTP 端口 本例中用到的 7 号端口很特殊 它回显接收到的任何数据 常用于端口检测 下面就向本机的 7 号端口发送数据报 DGSock Create Socketdgram 创建数据报式 Socket 对象 ulAddr ws inet addr 127 0 0 1 将本机 IP 地址转换为 32 位的 ulong 类型 buf Blob These data is send through datagram r n 要发送的数据 DGSock sendto buf Len buf 0 ulAddr 7 向 ulAddr 主机的 7 号端发送数据报 buf Blob Space Len buf 清空 buf 缓冲区 DGSock recv buf Len buf 0 接收数据报 MessageBox Data Received String buf 显示接收到的数据 DGSock closesocket 关闭 Socket Destroy DGSock 从上面的演示可以看出 发送到本机 7 号端口的数据报立即被反弹回来 2 用流式 Socket 开发网络聊天程序 网络聊天程序通常包含两个部分 服务程序和客户程序 服务程序一直处于监听 状态 当听到客户程序的呼叫时 就创建一个 Socket 对它进行响应 下面用流式 Socket 开发一个两节点聊天程序 1 编写服务程序 服务程序界面如图 1 所示 在主窗口的 Open 事件中创建流式 Socket 的一个实例 sSock Create SockStream sSock 为实例变量 在 监听 按钮的 Clicked 事件中加入下列代码 ulAddr ws inet addr 202 140 1 20 将服务器地址转为 ulong 类型 sSock bind ulAddr 2000 将流式 Socket 绑定到 ulAddr 地址的 2000 号端口上 sSock listen 5 监听上述地址和端口 参数为请求队列长度 最大值为 5 uiSockType sSock accept ulClientAddr iClientPort 接受客户请求 参数填入了客户 Socket 的地址和端口 返回值为客户 Socket 类 型 sAccept Create Socket 创建一个 Socket 响应客户请求 ulParam 1 sAccept initsocket uiSockType 与客户 Socket 类型相同 sAccept ioctlsocket ws FIONBIO ulParam 异步模式 Timer 0 5 启动定时器 以 0 5 秒的间隔接收数据 在 Timer 事件中加入下列代码来处理到达的数据 buf Blob Space 256 定义缓冲区大小 sAccept recv buf Len buf 0 接收到达的数据 mle 1 Text mle 1 Text Trim String buf 显示消息 在 发送 按钮的 Clicked 事件中加入下列代码 buf Blob mle 2 Text r n 将 mle 2 中的内容放入发送缓冲区 sAccept send buf Len buf 0 将 buf 中的内容发给对方 mle 2 Text 清除已发送的内容 在 退出 按钮的 Clicked 事件中加入下列代码 sAccept closesocket 关闭 Socket Destroy sAccept sSock closesocket Destroy sSock 清除 Socket 2 编写客户程序 设计如图 2 所示的窗口 其 Open 事件的代码为 sClient Create SocketStream 创建流式 Socket ulParam 1 1 表示异步模式 即非阻塞模式 Timer 0 5 启动定时器 以 0 5 秒的间隔检查是否有数据到达 sClient ioctlsocket ws FIONBIO ulParam 将 sClient 设置为异步模式 在 连接 按钮的 Clicked 事件中加入下列代码 ulAddr ws inet addr 202 140 1 20 服务器地址 If sClient wsconnect ulAddr 2000 1 Then 连接到服务器的 2000 号端口 MessageBox Socket 连接服务器失败 End If Timer 事件和 发送 按钮的 Clicked 事件的代码与服务程序相同 只需将套接字对 象 sAccept 改为 sClient 即可 声明 缺省情况下创建的流式 Socket 对象使用同步模式 可根据需要将其转换成 异步模式 在同步模式下 一些 Winsock 函数调用在完成处理之前不会把控制权还给 程序 导致程序无响应 例如 在数据到达之前 recv 调用将一直处于等待状态 在 上面的服务程序中 用于监听客户连接的 Socket 使用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑工程项目中的供应链管理优化
- 企业营运资金管理研究【开题报告-文献综述-毕业论文】
- 天津商业大学本科生毕业设计(论文)写作规范
- 工程合同完工百分比(3篇)
- 浅析广西南宁壮语地名命名特点
- 博士毕业论文评语范文(二)
- 生产管理存在的问题和对策
- 供应链管理下的采购管理论文
- 浅议职业伦理与道德的论文
- 研究生导师的学术评语
- 肥胖患者围术期麻醉管理
- 认识厘米这样教强震球
- 中国脑出血诊治指南
- 物流服务项目开发
- 流感样病例暴发疫情的调查与处理
- 私募证券投资基金调查问卷(自然人版)
- GB/T 8269-2006柠檬酸
- 生产与运作管理整个课程课件
- 课程实验大纲(JavaScript程序设计)
- 建筑识图与构造-课件
- 2022年上海市黄浦区精神卫生中心医护人员招聘笔试模拟试题及答案解析
评论
0/150
提交评论