在POWER BUILDER中使用WINSOCK控件

在POWER BUILDER中使用WINSOCK控件

(加入日期:2001-6-20)

保存文章至硬盤】【打印文章】【字體:

分享到: 0
湖南省懷化市電信局計算機中心 達偉春

---- 隨着資源共享和實時通訊的需要,很多計算機應用程序早已甩開單兵作戰的模式,轉入聯合行動。

---- 網絡在計算機世界裏,越來越發揮着舉足輕重的作用。在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)
        //建立直接連接
//requestID是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_1(caption屬性設爲‘發送’)的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  //將數據字符串顯示在文本框中

---- 以上程序實際上體現了聊天器的底層工作原理,稍加修改擴充就可以做成一個很好的聊天軟件。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章