用PB编写WinSock应用程序.docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
用PB编写WinSock应用程序

用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(″″)   //将本机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(″0″)   //将服务器地址转为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.Tex

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档