亚洲免费乱码视频,日韩 欧美 国产 动漫 一区,97在线观看免费视频播国产,中文字幕亚洲图片

      1. <legend id="ppnor"></legend>

      2. 
        
        <sup id="ppnor"><input id="ppnor"></input></sup>
        <s id="ppnor"></s>

        基于Winsock的小型網(wǎng)絡(luò)管理系統(tǒng)及其實(shí)現(xiàn)

        字號(hào):

        1 網(wǎng)絡(luò)管理系統(tǒng)的功能
            用戶登錄認(rèn)證,電子郵件系統(tǒng),文件傳送,消息通知
            2 Winsock控件介紹
            Winsock 控件對(duì)用戶來說是不可見的,它提供了訪問 TCP 和 UDP 網(wǎng)絡(luò)服務(wù)的方便途徑。Microsoft Access、Visual Basic、Visual C++ 或 Visual FoxPro 的開發(fā)人員都可使用它。為編寫客戶或服務(wù)器應(yīng)用程序,不必了解 TCP 的細(xì)節(jié)或調(diào)用低級(jí)的 Winsock APIs。通過設(shè)置控件的屬性并調(diào)用其方法就可輕易連接到一臺(tái)遠(yuǎn)程機(jī)器上去,并且還可雙向交換數(shù)據(jù)。
            如果創(chuàng)建客戶應(yīng)用程序,就必須知道服務(wù)器計(jì)算機(jī)名或者 IP 地址(RemoteHost 屬性),還要知道進(jìn)行“偵聽”的端口(RemotePort 屬性),然后調(diào)用 Connect 方法。如果創(chuàng)建服務(wù)器應(yīng)用程序,就應(yīng)設(shè)置一個(gè)收聽端口(LocalPort 屬性)并調(diào)用 Listen 方法。當(dāng)客戶計(jì)算機(jī)需要連接時(shí)就會(huì)發(fā)生 ConnectionRequest 事件。為了完成連接,可調(diào)用 ConnectionRequest 事件內(nèi)的 Accept 方法。
            建立連接后,任何一方計(jì)算機(jī)都可以收發(fā)數(shù)據(jù)。為了發(fā)送數(shù)據(jù),可調(diào)用 SendData 方法。當(dāng)接收數(shù)據(jù)時(shí)會(huì)發(fā)生 DataArrival 事件。調(diào)用 DataArrival 事件內(nèi)的 GetData 方法就可獲取數(shù)據(jù)。
            為實(shí)現(xiàn)Internet上兩個(gè)遠(yuǎn)程計(jì)算機(jī)之間的數(shù)據(jù)傳送,Winsock編程是一個(gè)十分便捷、快速的選擇。顯然,Winsock通信是基于Client/Server模式的,即服務(wù)器的Winsock在某端口進(jìn)行“偵聽”服務(wù),等待客戶機(jī)的申請(qǐng);那么如何實(shí)現(xiàn)兩臺(tái)計(jì)算機(jī)之間對(duì)等數(shù)據(jù)交換?實(shí)現(xiàn)中,可以把生成兩個(gè)Winsock對(duì)象,其中一個(gè)作為服務(wù)器對(duì)象在端口1“偵聽”,另外一個(gè)作為客戶機(jī)對(duì)象在端口2連接另一臺(tái)計(jì)算機(jī)——即每臺(tái)計(jì)算機(jī)可以作為服務(wù)器,也可以是客戶端。
            VB6.0中,Winsock有兩種數(shù)據(jù)傳送格式:字符串型和字節(jié)流型;平時(shí)的信息交互可以使用字符串型,但由于文件的傳送要顧及各種格式的文件,因此文件不能以字符串進(jìn)行傳送,此時(shí)以字節(jié)流型數(shù)據(jù)傳送可以保證數(shù)據(jù)完整。
            方法如下:
            ⑴如果是傳送字符串型,發(fā)送:Winsock1.SendData strData;接收:Winsock1.GetData strData(strData是字符串String型變量)。
            ⑵如果是傳送字節(jié)流型,發(fā)送:Winsock1.SendData strData();接收:Winsock1.GetData strData()(strData()是字節(jié)數(shù)組Dim strData() As BYTE)。
            3 小型網(wǎng)絡(luò)管理系統(tǒng)的Winsock實(shí)現(xiàn)方法
            3.1 Internet上的文件傳送實(shí)現(xiàn)方法
            當(dāng)計(jì)算機(jī)A向計(jì)算機(jī)B之間要求文件(包括上傳和下載)傳送時(shí),首先向計(jì)算機(jī)B發(fā)送文件傳送請(qǐng)求——第一“握手”,之后才進(jìn)行真正的文件數(shù)據(jù)傳送。Winsock的SendData 方法發(fā)送的數(shù)據(jù)默認(rèn)數(shù)據(jù)文件數(shù)據(jù)傳送中,第一次握手:文件傳送(上傳,下載)請(qǐng)求數(shù)據(jù)格式:
            操作類型 文件名 文件塊大小 文件塊數(shù)目 最后一塊大小(字節(jié))
            0:上傳 當(dāng)?shù)匚募?1kb(默認(rèn)) 文件長(zhǎng)度/塊大小
            1:申請(qǐng)下載 遠(yuǎn)程計(jì)算機(jī)中的文件名
            第二次握手:文件傳送(上傳,下載)請(qǐng)求響應(yīng)操作及回復(fù)信息
            上傳響應(yīng):發(fā)送OK,告訴對(duì)方可以開始傳送數(shù)據(jù)
            下載響應(yīng):傳送文件塊數(shù)目+塊大小+最后一塊字節(jié)大小
            之后,計(jì)算機(jī)之間進(jìn)入真正的文件數(shù)據(jù)傳送中,如圖(假定從A→B):
            如此反復(fù),直至文件的數(shù)據(jù)塊傳送完畢,在傳送中間可以根據(jù)傳送塊的剩余數(shù)目顯示進(jìn)度條。
            3.2 用戶登錄管理
            ⑴用戶登錄機(jī)制
            為保證安全性,用戶登錄采用加密傳送用戶名及密碼,用戶登錄機(jī)制如下:
            當(dāng)客戶機(jī)向服務(wù)器發(fā)出登錄請(qǐng)求時(shí),服務(wù)器生成相應(yīng)的Winsock對(duì)象接收(Accept)客戶機(jī)Winsock,從而建立服務(wù)器與不同的用戶之間的消息通道。
            ⑵Winsock服務(wù)器建立多客戶連接的方法:
            首先在服務(wù)器中建立Winsock數(shù)組Winsock1(),其中Winsock(0)進(jìn)行“偵聽”,當(dāng)客戶機(jī)發(fā)出連接請(qǐng)求(clintWinsock.Connect 服務(wù)器IP地址,服務(wù)器偵聽端口)時(shí)Winsock(0)產(chǎn)生如下消息:
            Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
            If Index = 0 Then ´主Winsock——Winsock(0)發(fā)生消息
            i = 1
            While i <= cur And onl(i, 0) = 0 ´在以前的Winsock中找到空閑的Winsock
             i = i + 1
             Wend
             If i <= cur Then ´在當(dāng)前裝載的Socket中發(fā)現(xiàn)有用戶已經(jīng)離開
             Winsock1(i).LocalPort = 0 ´使用現(xiàn)成的Socket
             Winsock1(i).Accept requestID ´接收
             onl(i, 0) = 0 ´Winsock(i)被占用
             Else ´在當(dāng)前裝載的Socket中沒發(fā)現(xiàn)有用戶離開
             cur = cur + 1 ´當(dāng)前接收端口增加
             Load Winsock1(cur) ´生成新的´ Winsock
             Winsock1(cur).LocalPort = 0
             Winsock1(cur).Accept requestID ´接收
             onl(cur, 0) = 0 ´Winsock(cur)被占用
            End If
            End Sub
            之后,服務(wù)器利用生成的Winsock(i)與第i個(gè)用戶通信。