在POWERBUILDER中使用WINSOCK控件的方法

翻译|其它|编辑:郝浩|2007-08-14 09:46:42.000|阅读 771 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

  随着资源共享和实时通讯的需要,很多计算机应用程序早已甩开单兵作战的模式,转入联合行动。

  网络在计算机世界里,越来越发挥着举足轻重的作用。在 WINDOWS 应用程序中,处理实时通讯最常用到的还是 MICROSOFT 公司提供的 WINSOCK 控件。许多资料都细述了 WINSOCK VB 中的使用方法,就连 WINDOWS 本身提供的 hlp 文件也是针对 VB 而写的。笔者因为实际应用的需要,琢磨出了 WINSOCK 控件在 PB 中的应用方法。好东西不敢独自享用,拿出来与大家共享。

  下面以一个简单程序为例,说明 WINSOCK 控件在 PB 中的使用:

  一、在窗口中添加 WINSOCK 控件:

  在应用中新开一个窗口,在窗口画板中点击 controls-->OLE 菜单项,弹出 Insert object 窗口,单击 Insert control 标签,从列表框中双击选定 Microsoft Winsock control,将 winsock 的图标贴在窗口上。

  在程序中该控件名称定为 winsock_a(甲方)和 winsock_b(乙方)。

  二、设置信息输入输出文本框:

  在窗口中增加一个按钮 cb_1,两个单行文本框 sle_1,sle_2,分别用于输入要发送的字符串和接受对方发送的字符串。

  三、设置通讯协议:

  WINSOCK 控件允许用户以 UDP TCP 两种协议中任选一种进行通讯。

  1.UDP 协议设置:UDP 协议是一种无连接的通讯协议,在通讯之前,需要绑定 remotehost remoteport 属性,如果需要双向通讯,还要设置 localport 属性。

  在甲方(本机地址为:134.1.1.1)窗口的 Open 事件中加入如下语句:

winsock_a.object.protocol=1
//winsock
通讯协议设为UDP协议
winsock_a.object.remotehost="134.1.1.2"
//
对方的ip地址
winsock_a.object.remoteport=6000
//
对方的winsock通讯端口号
winsock_a.object.localport=6001
//
本机的winsock通讯端口号
winsock_a.object.bind
//
绑定通讯协议


  在乙方(本机地址为:134.1.1.2)窗口的 Open 事件中加入如下语句:

winsock_b.object.protocol=1
//winsock
通讯协议设为UDP协议
winsock_b.object.remotehost="134.1.1.1"
//
对方的ip地址
winsock_b.object.remoteport=6001
//
对方的winsock通讯端口号
winsock_b.object.localport=6000
//
本机的winsock通讯端口号
winsock_b.object.bin
//
绑定通讯协议


  2.TCP 协议设置:TCP 协议在通讯前需要进行连接。

  在甲方(作为服务器端)窗口的 Open 事件中加入如下语句:

winsock_a.object.protocol=0
//winsock
通讯协议设为TCP协议
winsock_a.object.localport=6001
//
本机的winsock通讯端口号
winsock_a.listen()
//
启动监听


  在甲方 winsock_a 控件的 Connectionrequest 事件中加入如下语句:

//接受到对方的连接请求后
if winsock_a.object.state< >0 then
winsock_a.close()
end if
winsock_a.accept(requestID)
//
建立直接连接
//requested
Connectionrequest 事件自己的参数


  在乙方(作为客户端)窗口的 Open 事件中加入如下语句:

winsock_b.object.protocol=0
//winsock
通讯协议设为 TCP 协议
winsock_b.object.remotehost="134.1.1.2"
//
对方的 ip 地址
winsock_b.object.remoteport=6000
//
对方的 winsock 通讯端口号
winsock_b.connect() //
发出连接请求


  3.无论采用哪种协议,都要在窗口的 Close 事件中加入如下语句:

if winsock_a/* winsock_b*/.object.state< >0 then
winsock_a.close()
end if


  否则可能第二次使用时发生异常问题

  四、开始通讯

  在按钮cb_1caption 属性设为发送)的 click 事件中加入如下语句:

winsock_a/* winsock_b*/.object.send (sle_1.text)


  在 winsock_a/* winsock_b*/控件的 dataarrival 事件中加入如下语句:

//接受到对方数据后
string datastr1
winsock_a/*
winsock_b*/.object.getdata (def datastr1)
sle_2.text=datastr1 //
将数据字符串显示在文本框中


  以上程序实际上体现了聊天器的底层工作原理,稍加修改扩充就可以做成一个很好的聊天软件。 


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP