用PB编写WinSock应用程序

用PB编写WinSock应用程序

ID:37775080

大小:43.50 KB

页数:5页

时间:2019-05-30

用PB编写WinSock应用程序_第1页
用PB编写WinSock应用程序_第2页
用PB编写WinSock应用程序_第3页
用PB编写WinSock应用程序_第4页
用PB编写WinSock应用程序_第5页
资源描述:

《用PB编写WinSock应用程序》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、用PB编写WinSockTCP/IP应用程序PB中的套接字是通过Winsock.pbl库来提供的,它封装了套接字编程中用到的数据结构和过程,在功能上类似于VB中的Winsock控件。  Winsock.pbl中定义了两种类型的Socket:流式Socket和数据报式Socket。流式Socket需要连接到另一个处于监听状态的流式Socket后才能进行通信,是基于连接的,其可靠性高;数据报式Socket无需建立连接,源主机发出的报文在网络中经过存储转发后到达目的主机,效率高但可靠性低。编程时,根据应用环境和需求选择其中一种,若

2、通信子网相当可靠,可考虑采用数据报式Socket。  图1  用PB编写WinSockTCP/IP应用程序的第一步是将Winsock.pbl加到应用程序中,然后声明如下全局变量:  Winsockws  Booleanb—tcp—active  //用于检验ws是否初始化成功  PowerObjectgpo—null//全局空对象  在应用程序的Open事件加入下列代码:  ws=CreateWinsock  //初始化Winsock的一个实例  SetNull(gpo—null)//ws的函数中用到空对象gpo—null 

3、 在应用程序的Close事件加入下列代码:  图2  Destroyws//销毁ws对象  完成以上工作后,就可以着手编程了,下面介绍如何利用Socket进行通信。  1.用数据报式Socket向本机的7号端口发送数据  TCP和UDP协议规定了传输层端口的长度为16比特,因此TCP和UDP软件可以使用216个不同的端口进行通信。尽管如此,编程时最好不要使用前1024个端口,因为这个范围内很多是专用端口,如21为FTP端口。本例中用到的7号端口很特殊,它回显接收到的任何数据,常用于端口检测。下面就向本机的7号端口发送数据报:

4、  DGSock=CreateSocketdgram  //创建数据报式Socket对象  ulAddr=ws.inet—addr(″127.0.0.1″)  //将本机IP地址转换为32位的ulong类型  buf=Blob(″Thesedataissendthroughdatagram~r~n″)//要发送的数据  DGSock.sendto(buf,Len(buf),0,ulAddr,7)  //向ulAddr主机的7号端发送数据报  buf=Blob(Space(Len(buf)))  //清空buf缓冲区  DGS

5、ock.recv(buf,Len(buf),0)  //接收数据报  MessageBox(′DataReceived′,String(buf))  //显示接收到的数据  DGSock.closesocket()//关闭Socket  DestroyDGSock  从上面的演示可以看出,发送到本机7号端口的数据报立即被反弹回来。  2.用流式Socket开发网络聊天程序  网络聊天程序通常包含两个部分:服务程序和客户程序。服务程序一直处于监听状态,当听到客户程序的呼叫时,就创建一个Socket对它进行响应。下面用流式Soc

6、ket开发一个两节点聊天程序:  (1)编写服务程序  服务程序界面如图1所示。在主窗口的Open事件中创建流式Socket的一个实例:  sSock=CreateSockStream//sSock为实例变量  在“监听”按钮的Clicked事件中加入下列代码:  ulAddr=ws.inet—addr(″202.140.1.20″)  //将服务器地址转为ulong类型  sSock.bind(ulAddr,2000)//将流式Socket绑定到ulAddr地址的2000号端口上  sSock.listen(5)//监听上

7、述地址和端口,参数为请求队列长度,最大值为5  uiSockType=sSock.accept(ulClientAddr,iClientPort)  //接受客户请求,参数填入了客户Socket的地址和端口,返回值为客户Socket类型  sAccept=CreateSocket  //创建一个Socket响应客户请求  ulParam=1  sAccept.initsocket(uiSockType)  //与客户Socket类型相同  sAccept.ioctlsocket(ws.FIONBIO,ulParam)  //

8、异步模式  Timer(0.5)  //启动定时器,以0.5秒的间隔接收数据  在Timer事件中加入下列代码来处理到达的数据:  buf=Blob(Space(256))//定义缓冲区大小  sAccept.recv(buf,Len(buf),0)  //接收到达的数据  mle—1.T

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。