打印本文 打印本文 关闭窗口 关闭窗口
用PB编写WinSock TCP/IP应用程序_
作者:武汉SEO闵涛  文章来源:敏韬网  点击数1133  更新时间:2009/4/22 22:54:38  文章录入:mintao  责任编辑:mintao
  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号端口的数据报立即被反弹回来。

打印本文 打印本文 关闭窗口 关闭窗口