如何在PB中使用WINSOCK控制項

來源:互聯網
上載者:User

 

如何在PB中使用WINSOCK控制項 

 
  原著:達偉春

  隨著資源共用和即時通訊的需要,很多電腦應用程式早已甩開單兵作戰的模式,轉入聯合行動。 
  網路在電腦世界裡,越來越發揮著舉足輕重的作用。在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 //將資料字串顯示在文字框中。

  以上程式實際上體現了聊天器的底層工作原理,稍加修改擴充就可以做成一個很好的聊天軟體。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.