国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
VB Winsock控件的使用與介紹

第一節(jié):Winsock控件的介紹

Winsock控件的作用簡(jiǎn)單說就是可以用于兩臺(tái)或多臺(tái)機(jī)器間通信,這里不多說這個(gè)控件的作用了,因?yàn)樵谝院蟮慕榻B中我們會(huì)了解到這個(gè)控件的強(qiáng)大功能的,如可以用來做聊天軟件等……

廢話不多說,來看看他有些什么重要的屬性、方法和事件吧!

在VB6.0中的工具箱里默認(rèn)情況下是沒有這個(gè)控件的,添加方法如下:在工具箱上右擊,選擇[部件],然后在部件對(duì)話框中選擇"MicrosoftWinsock Control6.0",后確定即可。如果沒有這個(gè)復(fù)選框的話,請(qǐng)點(diǎn)擊[瀏覽]按鈕后在打開的[添加ActiveX控件]對(duì)話框選擇MSWINSCK.ocx后選擇打開,再點(diǎn)確定即可。Winsock控件在工具箱中圖標(biāo)為

。

Winsck的主要屬性:

屬性名
說明
BytesReceived
返回接收的數(shù)據(jù),可以用GetData方法來獲取它
LocalHostName
返回本機(jī)名
LocalIP
返回本機(jī)IP
LocalPort
返回或設(shè)置本機(jī)所用的端口,如果為0則為隨機(jī)產(chǎn)生
Protocol
返回通信所用的協(xié)議
RemoteHostName
返回通信對(duì)方的計(jì)算機(jī)名
RemoteHostIP
返回通信對(duì)方的IP
State
返回Winscok的當(dāng)前狀態(tài),取值如下
  • sckClosed(常量為0):關(guān)閉狀態(tài)
  • sckOpen(常量為1):打開狀態(tài)
  • sckListening(常量為2):偵聽狀態(tài)
  • sckConnectionPending(常量為3):連接狀態(tài)
  • sckResolvingHost(常量為4):解析主機(jī)中
  • sckHostResolved(常量為5):已解析主機(jī)
  • sckConnecting(常量為6):正在連接
  • sckConnected(常量為7):已經(jīng)連接
  • sckClosing(常量為8):客戶端正在關(guān)閉
  • sckError(常量為9):連接發(fā)生錯(cuò)誤

Winsock的主要方法:

方法名
作用
listen
使服務(wù)器程序處于偵聽狀態(tài),等待客戶端的連接請(qǐng)求
connect
用于客戶端向遠(yuǎn)程發(fā)送一個(gè)連接請(qǐng)求,語法:Winsock.connect [IP,Port]
Accept
用于服務(wù)器接收一個(gè)遠(yuǎn)程客戶端的連接請(qǐng)求,語法:Winsock.Accept requestID
sendData
用于向遠(yuǎn)程發(fā)送數(shù)據(jù),語法:Winsock.sendData 數(shù)據(jù)
getData
用于接收遠(yuǎn)程發(fā)送來的數(shù)據(jù),語法:Winsock.getData 變量
Close
關(guān)閉通信

Winsock的主要事件:

事件名
說明
Connect
當(dāng)服務(wù)器接收客戶端請(qǐng)求時(shí),服務(wù)端發(fā)生的事件
DataArrival
有數(shù)據(jù)到達(dá)時(shí)發(fā)生的事件,可以在這個(gè)事件中來getData發(fā)送來的數(shù)據(jù)
ConnectionRequest
客戶端用Connect方法時(shí)服務(wù)器發(fā)生的事件,可以在這個(gè)事件中來Accept一個(gè)連接請(qǐng)求
SendProgress
發(fā)送數(shù)據(jù)中發(fā)生的事件,可以在這個(gè)事件中來標(biāo)示當(dāng)前已經(jīng)發(fā)送多少數(shù)據(jù)
SendComplete
發(fā)送數(shù)據(jù)完成發(fā)生的事件
Error
通信發(fā)生錯(cuò)誤時(shí)發(fā)生的事件
Close
關(guān)閉通信時(shí)發(fā)生的事件

這節(jié)我們?cè)敿?xì)介紹了Winsock控件的屬性、方法和事件等,只要擁有這些,我們就可以編很多功能強(qiáng)大的軟件了。在接下來的幾課中我們將以實(shí)例來說明Winsock的應(yīng)用。

第二節(jié):Winsock聊天器實(shí)例

上一節(jié)我們介紹了Winsock控件,這節(jié)我們將以一個(gè)聊天器的實(shí)例來說說如何應(yīng)運(yùn)Winsock控件進(jìn)行計(jì)算機(jī)之間的通信。

我也做了一個(gè)聊天器,程序點(diǎn)擊這里下載

這節(jié)課我們做了用于通信的服務(wù)端和客戶端,在制作他們之前,先看看服務(wù)端和客戶端是如何設(shè)計(jì)的:(注:要復(fù)制本頁代碼時(shí)要注意去掉不正確的字符如?號(hào)

服務(wù)端的設(shè)計(jì):

1、設(shè)置好localPort作為偵聽端口

2、使用listen使服務(wù)端處在偵聽狀態(tài)

3、客戶端發(fā)出連接請(qǐng)求后觸發(fā)ConnectionRequest事件

4、在ConnectionRequest中用Accept方法來接收客戶端的連接請(qǐng)求

5、收發(fā)數(shù)據(jù)

客戶端的設(shè)計(jì):

1、設(shè)置RemoteHost,即你要連接IP

2、設(shè)置好RemotePort,即通信的端口號(hào),要與服務(wù)端的一致

3、使用Connect方法向服務(wù)端發(fā)出連接請(qǐng)求

4、如果服務(wù)端同意連接請(qǐng)求則觸發(fā)Connect事件

5、收發(fā)數(shù)據(jù)

服務(wù)端的制作:

界面如下:

服務(wù)器設(shè)計(jì)第一、二步的實(shí)現(xiàn)(窗體的Load事件):

Private Sub Form_Load()
        wskServer.LocalPort = 1024    ' 1、設(shè)置好localPort作為偵聽端口
        wskServer.Listen      ' 2、使用listen使服務(wù)端處在偵聽狀態(tài)
End Sub

服務(wù)器設(shè)計(jì)第三、四步的實(shí)現(xiàn)(Winsock的Connect):

Private Sub wskServer_ConnectionRequest(ByVal requestID As Long)
        If wskServer.State <> sckClosed Then
                wskServer.Close     '這里要先關(guān)閉,要不會(huì)報(bào)錯(cuò)
                wskServer.Accept requestID      ' 4、在ConnectionRequest中用Accept方法來接收客戶端的連接請(qǐng)求
        End If
End Sub

服務(wù)器設(shè)計(jì)第五步的實(shí)現(xiàn):

Private Sub cmdSend_Click()
         wskServer.SendData txtMessage.Text     '發(fā)送數(shù)據(jù)
        txtContent.Text = vbCrLf & txtContent.Text & "我說:" & txtMessage.Text        '加到聊天記錄中
        txtContent.Text=""
End Sub

Private Sub wskServer_DataArrival(ByVal bytesTotal As Long)
         Dim tempS As String
         wskServer.GetData tempS    '接收數(shù)據(jù)
         txtContent.Text = txtContent.Text & "對(duì)方說:" & tempS & vbCrLf        '加到聊天記錄中
End Sub

將上面的程序生成一個(gè)EXE文件(名為:Server.exe),然后新建一個(gè)工程以制作客戶端。

客戶端的制作:

界面如下:

客戶端設(shè)計(jì)第一、二、三步的實(shí)現(xiàn):

Private Sub cmdConnect_Click()
         Dim IP As String
         IP = InputBox("請(qǐng)輸入要連接的IP", "輸入的IP", "127.0.0.1")       '連接的IP默認(rèn)為本機(jī)
         wskClient.RemoteHost = IP      '1、設(shè)置RemoteHost,即你要連接IP
         wskClient.RemotePort = 1024        '2、設(shè)置好RemotePort,即通信的端口號(hào),要與服務(wù)端的一致
         wskClient.Connect      '3、使用Connect方法向服務(wù)端發(fā)出連接請(qǐng)求
         cmdConnect.Enabled = False
End Sub

客戶端設(shè)計(jì)第五步的實(shí)現(xiàn)(發(fā)送和接收代碼和服務(wù)器一致,只不過控件名不同而已):

Private Sub cmdSend_Click()
         wskClient.SendData txtMessage.Text     '發(fā)送數(shù)據(jù)
        txtContent.Text = vbCrLf & txtContent.Text & "我說:" & txtMessage.Text        '加到聊天記錄中
        txtContent.Text=""
End Sub

Private Sub wskClient_DataArrival(ByVal bytesTotal As Long)
         Dim tempS As String
         wskClient.GetData tempS    '接收數(shù)據(jù)
         txtContent.Text = txtContent.Text & "對(duì)方說:" & tempS & vbCrLf        '加到聊天記錄中
End Sub

生成EXE文件(名為:Client.exe)。這樣一個(gè)聊天器就做好了,在本機(jī)也可以試試,運(yùn)行方法是先打開Server.exe,后打開Client.exe,然后在Client.exe點(diǎn)擊連接按鈕,連接地址為"127.0.0.1",確定,然后在下面的文本框輸入內(nèi)容點(diǎn)發(fā)送按鈕即可。在建立連接后Server.exe的操作方法和Client.exe的操作方法一樣。試試吧!

最后說一句:實(shí)際上我們會(huì)發(fā)現(xiàn)這樣的聊天器怎么會(huì)分為兩個(gè)部份呢,這樣多不方便。實(shí)際上我們可以合成一個(gè),即在一個(gè)窗體上放一個(gè)wskServer再放一個(gè)wskClient,這樣就OK了,這里是為了更好的說明就放分成兩個(gè)的。還有就是這個(gè)聊天器是基于TCP協(xié)議,這個(gè)協(xié)議保證了通信的數(shù)據(jù)不會(huì)丟失,這個(gè)協(xié)議只能一對(duì)一,但在實(shí)際中我們聊天的對(duì)象不會(huì)是一個(gè)人吧,這樣就要用到可以一對(duì)多但不保證數(shù)據(jù)能完全到達(dá)UDP協(xié)議了,簡(jiǎn)單而言TCP用于一對(duì)一,而UDP可以運(yùn)用于一對(duì)多。下一節(jié)我們將介紹用Winsock制作一個(gè)簡(jiǎn)單的Web服務(wù)器。

第三節(jié):Winsock制作Web服務(wù)器

在本節(jié)中,我們將制作一個(gè)簡(jiǎn)單的Web服務(wù)器(點(diǎn)擊這里下載源文件)。

按上節(jié)的說法,我們可以把Web服務(wù)器看是一個(gè)服務(wù)端,而瀏覽器則是一個(gè)一個(gè)的客戶端,他們以一個(gè)相同的端口(如HTTP默認(rèn)為80,F(xiàn)TP默認(rèn)為21),所以就能通信。他們的工作流程大概如下:首先Web服務(wù)器在某一端口上等待瀏覽器的連接,然后瀏覽器向目標(biāo)Web服務(wù)器發(fā)出要求瀏覽某一網(wǎng)頁的請(qǐng)求,最后Web服務(wù)根據(jù)請(qǐng)求發(fā)送相應(yīng)的網(wǎng)頁源文件給瀏覽器。

用過ASP的都知道,我們有一個(gè)Web服務(wù)器叫IIS,這個(gè)服務(wù)器就是根據(jù)瀏覽器的請(qǐng)求而產(chǎn)生相應(yīng)的源碼然后發(fā)送到用戶的瀏覽器上的。

別的不多說,界面很簡(jiǎn)單:

將文本框設(shè)置可以顯示多行文本。為了有別于其他,我們這個(gè)Web服務(wù)器將使用端口124。制作流程如下:

在Form_Load事件中將服務(wù)器的偵聽端口設(shè)為124:

Private Sub Form_Load()
        wskServer.LocalPort = 124
        wskServer.Listen
End Sub

在wskServer的ConnectionRequest事件中接受客戶端(瀏覽器)的連接:

Private Sub wskServer_ConnectionRequest(ByVal requestID As Long)
        If wskServer.State <> sckClosed Then
                wskServer.Close
        End If
        wskServer.Accept requestID
End Sub

在wskServer控件的DataArrival事件中加當(dāng)瀏覽器的請(qǐng)求文本來時(shí)發(fā)送源代碼過去:

Private Sub wskServer_DataArrival(ByVal bytesTotal As Long)
        'Dim tempS As String
        'wskServer.GetData tempS
        'txtMain.Text = tempS
        txtMain.Text = txtMain.Text & "一個(gè)IP為[" & wskServer.RemoteHostIP & "]連接對(duì)象" & vbCrLf
        sendCode ("index.htm")
End Sub

這里在窗體模塊(窗體聲明)中加入一個(gè)發(fā)送源代碼的sendCode的Sub過程:

Sub sendCode(fileName As String)
        Open App.Path & "\" & fileName For Input As #1
        Dim tempS As String
        Do While Not EOF(1)
                Line Input #1, tempS
                wskServer.SendData tempS
        Loop
        Close #1
End Sub

在cmdClose的Click事件中關(guān)閉窗體和服務(wù):

Private Sub cmdClose_Click()
        wskServer.Close
        Unload Me
        End
End Sub

最后要在wskServer的SendComplete事件中加入如下代碼:

Private Sub wskServer_SendComplete()
wskServer.Close
End Sub

這里制作好了,將工程文件保存在[C:\temp]文件夾中,然后自己做一個(gè)網(wǎng)頁名為index.htm也放在[C:\temp]中。這時(shí)按F5運(yùn)行,然后打開IE,輸入:http://127.0.0.1:124,這下等網(wǎng)頁的顯示吧。

這只是一個(gè)簡(jiǎn)單的Web服務(wù)器,只能給你們說明一些原理,下面說幾個(gè)問題:

1、我們?nèi)绾沃揽蛻舳艘氖悄膫€(gè)文件:

實(shí)際上我們給Web服務(wù)器發(fā)送連接會(huì)有一個(gè)文本請(qǐng)求來說明自己要的是什么文件,比如你把上面的wskServer的DataArrival事件中的前三行取消注釋,再次按上面的方法來運(yùn)行一次,不過這次把請(qǐng)求網(wǎng)址改為:"http://127.0.0.1/1.htm",那么文本框中會(huì)顯示瀏覽器的請(qǐng)求文本為(以我的瀏覽器為例):

GET /1.htm HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: 127.0.0.1:124
Connection: Keep-Alive

你看第一行就知道客戶端要的是什么文件了。

2、為什么在wskServer的SendComplete事件中要關(guān)閉服務(wù)器:

回答這個(gè)問題你可以將wskServer.Close注釋起來再次運(yùn)行,你會(huì)發(fā)現(xiàn)要很久(或要刷新網(wǎng)頁)才會(huì)有頁面出現(xiàn),這是因?yàn)槿绻?wù)一直在的話,那么瀏覽器以為服務(wù)的數(shù)據(jù)沒有傳完,就一直等待,所以要在傳送完源代碼時(shí)關(guān)閉服務(wù)器。

3、能不能用Winsock做自己的瀏覽器:

能。我們可以用Winsock下載網(wǎng)頁的源代碼,但在VB中我們有另一個(gè)功能更強(qiáng)大的控件來做我們的瀏覽器,將在下節(jié)中說明具體的做法。

第四節(jié):Winsock制作多客戶服務(wù)器

我們前面的程序都只說到使用Winsock制作一對(duì)一的連接,實(shí)際上我們使用控件數(shù)組的話,那么可以制作一個(gè)多客戶連接的服務(wù)器。不過本質(zhì)上還是一對(duì)一,不過是服務(wù)器上不只一個(gè)Windsock而已。

我們?cè)诖绑w上放一個(gè)Winsock,將他的Name改為sckServer,index屬性改為0。然后就是代碼了:

clientCount As Integer        '定義一個(gè)窗體級(jí)變量來記錄客戶的連接數(shù)。

Private Sub Form_Load()
clientCount = 0
sckServer(0).LocalPort = 2000       '設(shè)置好偵聽端口
sckServer(0).Listen      '開始偵聽
End Sub   

Private Sub sckServer_ConnectionRequest (Index As Integer, ByVal requestID As Long)
If Index = 0 Then
clientCount = clientCount + 1       '客戶請(qǐng)求多一個(gè)
Load sckServer(clientCount)         '載入一個(gè)服務(wù)端為新增的客戶服務(wù)
sckServer(clientCount).LocalPort = 0    '偵聽端口為隨機(jī),不能設(shè)為2000,因?yàn)橛衧ckServer(0)在使用了。
sckServer(clientCount).Accept requestID        '接受請(qǐng)求
End If
End Sub

看了代碼明白了吧,所謂多客戶服務(wù)器就是多個(gè)Winsock服務(wù)端在為客戶服務(wù)而已,當(dāng)然我們不用同步的時(shí)候也可以用一個(gè)Winsock來連續(xù)的關(guān)閉、連接來做多客戶服務(wù)器也是可以的。

第五節(jié):Web瀏覽器控件

在VB6.0中Web瀏覽器控件是WebBrowser,他的作用是讓我們只要加入少量的代碼,就能做出和IE功能一樣強(qiáng)大的瀏覽器。(

WebBrowser的功能強(qiáng)大是由眾多方法、屬性和行為組成的,下面說下它的主要屬性、方法和行為。

WebBrowser的主要屬性:

屬性名
說明
LocationURL
返回當(dāng)WebBrower中網(wǎng)頁的URL
LocationName
返回當(dāng)WebBrower中網(wǎng)頁的標(biāo)題,即HTML中的Title標(biāo)記

WebBrowser的主要方法:

方法名
作用
Navigate
瀏覽網(wǎng)頁。如:WebBrower.Navigate "http://junqing124.update.vip2.com"
GoBack
后退
GoForward
前進(jìn)
GoHome
瀏覽主頁
GoSearch
打開搜索頁面
Refresh
刷新
Stop
停止

WebBrowser的主要事件:

事件名
說明
DownloadBegin
頁面開始下載
DownloadComplete
頁面下載完畢
TitleChange
瀏覽器的Title改變,即瀏覽新的頁面

這里簡(jiǎn)單說了下WebBrower控件的部份屬性、方法和行為。

下面是一個(gè)示例:

上面的四個(gè)按鈕的名字分別為Command1、Command2、Command3、Command4,下面的文本框?yàn)門ext1,最下面的是一個(gè)WebBrowser,名字為WebBrowser1

在Command1的Click事件加入:WebBrowser1.GoBack

在Command2的Click事件加入:WebBrowser1.GoForward

在Command3的Click事件加入:WebBrowser1.Refresh

在Command4的Click事件加入:If WebBrowser1.Busy = True Then WebBrowser1.Stop

在Text1的KeyPress事件加入:If KeyAscii = 13 Then WebBrowser1.Navigate Text1.Text

按F5運(yùn)行,在文本輸入網(wǎng)址后回車看看效果吧!

打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
【重要】winsock 如何允許更多客戶端同時(shí)連接
VB關(guān)于webbrowser相關(guān)操作大全
利用Winsock控件實(shí)現(xiàn)FTP編程
用VB實(shí)現(xiàn)客戶——服務(wù)器(TCP/IP)編程實(shí)例 — 編程愛好者 programfan.c...
VB6 通過winsock控件數(shù)組實(shí)現(xiàn)客戶端和服務(wù)器多對(duì)一通信
VBA -網(wǎng)頁控制方式簡(jiǎn)介
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服