<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    大鳥的學習樂園
    路漫漫其修遠兮,吾將上下而求索
    posts - 26,comments - 27,trackbacks - 0

    Winsock控件建立在TCP、UDP協(xié)議的基礎上,完成與遠程計算機的通信。即使對TCP/IP不太熟悉的用戶,使用該控件也可以在十幾分鐘內(nèi)創(chuàng)建一 個簡單的客戶機/服務器程序。下面我們對Winsock控件的事件、方法、屬性按其在程序中出現(xiàn)的順序分別作詳細的介紹,以便更好地理解程序源代碼。
    下面是Winsock控件的相關(guān)屬性,方法和事件。(略去一些暫用不到的)
    *屬性
    -------------------------------------------------------------------------
    LocalHostName | 本地機器名
    LocalIP | 本地機器IP地址
    LocalPort | 本地機器通信程序的端口(0 <端口 <65536)
    RemoteHost | 遠程機器名
    RemotePort | 遠程機器的通信程序端口
    state | 連接的當前狀態(tài)(文后有詳細說明)
    Protocal | 使用TCP或UDP協(xié)議(這里我們選‘0-sckTCPProtocal’)
    --------------------------------------------------------------------------
    *方法
    --------------------------------------------------------------------------
    Listen
    Listen方法用于服務器程序,等待客戶訪問。
    格式:Winsock對象.listen
    Connect
    Connect方法用于向遠程主機發(fā)出連接請求
    格式:Winsock對象.connect [遠程主機IP,遠程端口]
    Accept
    Accept方法用于接受一個連接請求
    格式:Winsock對象.accept Request ID
    Senddata
    此方法用于發(fā)送數(shù)據(jù)
    格式:Winsock對象.senddata 數(shù)據(jù)
    Getdata
    用來取得接收到的數(shù)據(jù)
    格式:Winsock對象.getdata 變量 [,數(shù)據(jù)類型 [,最大長度]]
    Close
    關(guān)閉當前連接
    格式:Winsock對象.close
    *事件
    ----------------------------------------------------------------------------
    Close | 遠程機器關(guān)閉連接時觸發(fā)
    Connect | 連接建立好,可以進行通信時觸發(fā)(客戶端)
    ConnectRequest | 有請求連接到達時產(chǎn)生(服務器端)
    DataArrival | 有數(shù)據(jù)到達時觸發(fā)
    Error | 發(fā)生錯誤時發(fā)生
    SendProgress | 數(shù)據(jù)傳送進度
    -----------------------------------------------------------------------------

    服務器程序的實現(xiàn)過程是:
    (1)服務器程序必須設置好LocalPort屬性,作為偵聽端口,該值為一個整數(shù)(只要是一個其它TCP/IP應用程序沒有使用過的值即可)。
    (2)使用Listen方法進入偵聽狀態(tài),等待客戶機程序的連接請求。
    (3)客戶機程序發(fā)出連接請求,使服務器程序產(chǎn)生ConnectionRequest事件,該事件得到一個參數(shù)requestID。
    (4)服務器程序用Accept方法接受客戶機程序的requestID請求。這樣,服務器程序就可以用SendData方法發(fā)送數(shù)據(jù)了。Accept方法必須用上一步得到的requestID作為其參數(shù)。
    (5)當服務器程序接收到數(shù)據(jù)時,產(chǎn)生DataArrival事件,參數(shù)BytesTotal包含接收到的數(shù)據(jù)字節(jié)數(shù)。在該事件中,可以用GetData方法接收數(shù)據(jù)。
    (6)如果接受到Close事件,則用Close方法關(guān)閉TCP/IP連接。
    客戶機程序的實現(xiàn)過程是:
    (1) 客戶程序設置Remotehost屬性,以便指定運行服務器程序的主機 名,該字符串可在“控制面板|網(wǎng)絡|標識|計算機名”中查到。
    (2) 設置RemotePort屬性,以便指定服務器程序的偵聽端口。
    (3)使用Connect方法,向服務器提出連接請求。
    (4)服務器接受客戶機程序的請求,客戶機程序產(chǎn)生Connect事件,就可以用SendData方法發(fā)送數(shù)據(jù)了。
    (5)當客戶機程序接收到數(shù)據(jù)時,產(chǎn)生DataArrival事件,參數(shù)BytesTotal包含接收到的數(shù)據(jù)字節(jié)數(shù)。在該事件中,可以用GetData方法接收數(shù)據(jù)。
    (6)如果接受到Close事件,則用Close方法關(guān)閉連接。
    Winsock控件還有兩個重要的屬性,即Protocol和State。Protocol設定使用的協(xié)議是TCP還是UDP:取值 sckTCPProtocol表示TCP, 取值sckUDPProtocol則表示UDP。因為Winsock控件的缺省設置是sckTCPProtocol,所以程序中并沒有使用 Protocol屬性。State屬性反映的是當前TCP/IP的連接狀態(tài),取值如表1所示。
    表1 Winsock控件的State屬性及其描述
    常數(shù) 值 描述
    SckClosed 0 缺省值,關(guān)閉
    SckOpen 1 打開
    SckListening 2 偵聽
    SckConnectionPending 3 連接掛起
    SckResolvingHost 4 識別主機
    SckHostResolved 5 已識別主機
    SckConnecting 6 正在連接
    SckConnected 7 已連接
    SckClosing 8 同級人員正在關(guān)閉連接
    SckError 9 錯誤
    先在一臺計算機上運行服務器程序,此時窗口上只有一個“退出”按鈕。 再在另一臺計算機上運行客戶機程序,在“連接”按鈕右邊的文本框中輸入服務器的主機名后單擊“連接”按鈕。如果連接成功,則服務器和客戶機程序窗口都會出 現(xiàn)兩個文本框。這時,兩端都可以在上面的文本框中輸入文字,這些文字會立即在下面的文本框中出現(xiàn)。
    服務器程序使用的控件如下:
    (1)Command1:退出按鈕;
    (2)textsend:發(fā)送數(shù)據(jù)文本框;
    (3)Winsockserver: 服務器Winsock;
    (4)textget :接收數(shù)據(jù)文本框。
    服務器程序的界面如圖所示。
    服務器程序的源代碼如下:
    Private Sub Command1_Click()
    End
    End Sub
    Private Sub Form_Load()
    textsend.Visible = False
    textget.Visible = False
    Winsockserver.LocalPort = 1001
    Winsockserver.Listen
    End Sub

    Private Sub textsend_Change()
    Winsockserver.SendData textsend.Text
    End Sub
    Private Sub Winsockserver_Close()
    Winsockserver.Close
    End
    End Sub

    Private Sub Winsockserver_ConnectionRequest(ByVal requestID As Long)
    textsend.Visible = True
    textget.Visible = True
    If Winsockserver.State <> sckClosed Then Winsockserver.Close
    Winsockserver.Accept requestID
    End Sub

    Private Sub Winsockserver_DataArrival(ByVal bytesTotal As Long)
    Dim tmpstr As String

    Winsockserver.GetData tmpstr
    textget.Text = tmpstr
    End Sub

    客戶機程序使用的控件如下:
    (1)Command1:退出按鈕;
    (2)Command2:連接按鈕;
    (3)Winsockclient:客戶Winsock;
    (4)Text1:主機名文本框;
    (5)Textsend:發(fā)送數(shù)據(jù)文本框;
    (6)Textget:接收數(shù)據(jù)文本框;   
    客戶機程序的源代碼如下:
    Private Sub Command1_Click()
    End
    End Sub
    Private Sub Command2_Click()
    Winsockclient.Connect
    End Sub
    Private Sub Form_Load()
    textsend.Visible = False
    textget.Visible = False
    Winsockclient.RemotePort = 1001
    Winsockclient.RemoteHost = "sccdsz"
    End Sub
    Private Sub Text1_Change()
    Winsockclient.RemoteHost = Text1.Text
    End Sub
    Private Sub textsend_Change()
    Winsockclient.SendData textsend.Text
    End Sub
    Private Sub Winsockclient_Close()
    Winsockclient.Close
    End
    End Sub
    Private Sub winsockclient_Connect()
    textsend.Visible = True
    textget.Visible = True
    Command2.Visible = False
    End Sub
    Private Sub winsockclient_DataArrival(ByVal bytesTotal As Long)
    Dim tmpstr As String
    Winsockclient.GetData tmpstr
    textget.Text = tmpstr
    End Sub

    我試過了,可以用

    posted on 2009-08-21 13:53 大鳥 閱讀(1560) 評論(0)  編輯  收藏 所屬分類: VBA
    主站蜘蛛池模板: 99视频在线免费观看| 美女视频黄.免费网址 | 国产资源免费观看| 亚洲一欧洲中文字幕在线| 5g影院5g天天爽永久免费影院| 亚洲天天在线日亚洲洲精| 久久免费国产视频| 久久国产亚洲高清观看| 24小时日本电影免费看| 亚洲熟妇无码久久精品| 无码永久免费AV网站| 亚洲中文字幕乱码熟女在线| 国产精品无码一区二区三区免费| 美女裸免费观看网站| 亚洲中文字幕在线观看| 久操免费在线观看| ass亚洲**毛茸茸pics| 国产成人免费手机在线观看视频 | 91福利视频免费观看| 激情综合亚洲色婷婷五月| 国产一级特黄高清免费大片| 一级毛片完整版免费播放一区| 国产精品亚洲一区二区三区在线| 免费国产黄网站在线观看视频| 亚洲av永久无码精品三区在线4 | 亚洲gv猛男gv无码男同短文| 免费国产黄网站在线观看 | 免费一级毛suv好看的国产网站| 亚洲黄黄黄网站在线观看| 精品视频在线免费观看| 亚洲乱码一二三四区乱码| 免费吃奶摸下激烈视频| 一级毛片免费观看不卡视频 | 免费在线观看一区| 亚洲今日精彩视频| 日韩免费无砖专区2020狼| 9久热精品免费观看视频| 亚洲国产成人精品久久| 国产一区视频在线免费观看 | 爱情岛论坛网亚洲品质自拍| 18禁黄网站禁片免费观看不卡|