• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    在VB中實現客戶端程序自動查找并連接服務端程序

    發布: 2007-5-25 09:21 | 作者: netmuse | 來源: 互聯網 | 查看: 52次 | 進入軟件測試論壇討論

    領測軟件測試網VB中實現客戶端程序自動查找并連接服務端程序
                   (南京審計學院教育技術中心 210029  丁國勇)
    在一般的講解WINSOCK控件的用法的文章中,無論是使用TCP還是UDP,客戶端程序連接服務端程序時無一例外的要指定IP地址(或機器名)和端口號,那么,在端口已知而服務端程序所在機器地址或名稱未知的情況下,怎樣實現客戶端程序發起并建立連接呢,筆者在實際編程中遇到了這種情況,并使用如下方法解決了這個問題。
    這種方法巧妙的將 TCP與UDP結合起來,概括起來就是UDP查找,TCP連接。
    對于客戶端程序,使用了三個WINSOCK 控件:
    1 sockclient   協議sckTcpprotocol 用于向服務端程序發起TCP連接
    2 socklink     協議sckUdpprotocol 用于向本網廣播地址發送數據
    3 sockgetdata  協議sckUdpprotocol 用于接受從服務端程序返回的信息
    定義一個String類型全局變量 MeIp,用于存放本機的IP地址。
    在Form_load()事件中,編寫如下程序:
    Dim netbcaddress As String
    MeIp = socklink.LocalIP     獲得本機IP地址
    netmask存放本網的廣播地址,
    設IP地址為192.168.100.215,子網掩碼為255.255.255.0
    該網的廣播地址即為192.168.100.255,從本機IP地址怎樣得到
    播地址請讀者自己考慮。
    sockgetdata.Bind "9400"  ' 定到本地端口9400
    socklink.RemoteHost = netmask   '本網廣播地址發送信息,內容是本機的IP地址
    socklink.RemotePort = 9401
    socklink.SendData "dgy.." & MeIp
    在sockgetdata的DataArrival里這樣定義
    Private Sub sockgetdata_DataArrival(ByVal bytesTotal As Long)
    Dim StrData As String
    sockgetdata.GetData StrData  '得數據,數據為服務端程序所在機器的IP地址
    If Trim(StrData) <> "" Then
    sockclient.RemoteHost = StrData  '戶端程序與服務端程序建立連接。
    sockclient.RemotePort = 8092
    sockclient.Connect
    End If
    End Sub
    在服務端程序中,則要從廣播地址獲得客戶端的IP地址,并將自己的IP地址發送到客戶端,讓客戶
    端與自己建立連接.
    服務端程序中,同樣也用到如下三個winsock控件:
    1 sockserver控件數組  協議sckTcpprotocol 用于接受客戶端的TCP連接
    2 sockgetdata   協議sckUdpprotocol  用于從廣播地址獲得客戶端的IP地址
    3 sockudpsend   協議sckUdpprotocol  用于向客戶端發送服務端程序的IP地址
    在Form_load()中
    sockgetdata.Bind "9401"  '9401端口偵聽
    定義如下結構和函數用于分離數據
    Option Explicit
    Private Type UdpData
        ok As Boolean
        IP As String
    End Type
    Private Function UdpDataSwitch(UdpData As String) As UdpData
    Dim p As String
    Dim MyStrs As Variant
    Dim strs As Variant
    p = ""
    MyStrs = Split(UdpData, "..")
    For Each strs In MyStrs
        If p = "dgy" Then
            UdpDataSwitch.ok = True
            UdpDataSwitch.IP = strs
            Exit Function
        End If
        p = strs
    Next
    UdpDataSwitch.ok = False
    UdpDataSwitch.IP = ""
    End Function
    在sockgetdata的DataArrival事件中
    Private Sub sockgetdata_DataArrival(ByVal bytesTotal As Long)
    DoEvents
    Dim DataArrival As String
    Dim CanSend As Boolean
    Dim Cip As String
    sockudplink.GetData DataArrival
    CanSend = UdpDataSwitch(DataArrival).ok
    If CanSend = True Then
        sockudpsend.RemoteHost = UdpDataSwitch(DataArrival).IP
        sockudpsend.RemotePort =9400
        sockudpsend.SendData sockudpsend.LocalIP
        End If
    End Sub
    至于sockserver 怎樣響應sockclient 的連接請求,看一般的介紹winsock編程的文章就可以
    得到答案。
    這樣,就能完成在端口已知而服務端程序所在機器地址或名稱未知的情況下,巧妙使用UDP和TCP,完成客戶端程序與服務端程序的連接。
    關于在VB中怎樣得到本機所在網絡的廣播地址(特別是在動態獲得IP地址的情況下),歡迎大家來信與我探討   netmuse@njai.edu.cn
     

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>