天堂国产午夜亚洲专区-少妇人妻综合久久蜜臀-国产成人户外露出视频在线-国产91传媒一区二区三区

QQ聊天程序的網(wǎng)絡(luò)通信原理及編程

發(fā)布時間:2016-08-16 10:02

  本文關(guān)鍵詞:QQ聊天程序的網(wǎng)絡(luò)通信原理及編程,由筆耕文化傳播整理發(fā)布。


QQ聊天程序的網(wǎng)絡(luò)通信原理及編程的論文,對網(wǎng)絡(luò)編程學(xué)習(xí)很有幫助

●●●-●●-●●-t----●---●●-●__--●●-●---●-●●---●●-●-●●-●●●-----●_●川●-●●-

實用第一/智慧密集

。。...........。............。。。..。...........。..。.............。......。。j?代表什么含義,每條數(shù)據(jù)最前面有代表不同含義的數(shù)據(jù)含義標(biāo),

DimtmpstrAsString

記字符串,每條數(shù)據(jù)后有相同的數(shù)據(jù)結(jié)束標(biāo)記符,每條數(shù)據(jù)中各子數(shù)據(jù)間有子數(shù)據(jù)分割標(biāo)記符。各數(shù)據(jù)含義標(biāo)記字符串如下:

Public

ConstOnlineFriendlPlD=’FriendlPID’

7表示本數(shù)據(jù)中包含在線好友的IP地址和lD

Public

ConstLogin=。UserLogin’

’表示本數(shù)據(jù)中包含登錄用戶的用戶ID和密碼

PublicConstNotUser=’IsNotUser’

7本數(shù)據(jù)含義為“不是合法用戶”

PublicConstIsUser=+ThislsUser’

7本數(shù)據(jù)含義為“是合法用戶”

為了識別數(shù)據(jù)含義方便,含義標(biāo)記字符串長度一致,我這里采用的長度為10。

PublicConstHeadLength=lO

關(guān)于分割標(biāo)記符和結(jié)束標(biāo)記符,我采用數(shù)值1和2轉(zhuǎn)字符的方法,因為它們轉(zhuǎn)成的字符不是普通字符,不會和傳送的數(shù)據(jù)如用戶ID、密碼、IP地址等字符串?dāng)?shù)據(jù)混淆。

具體發(fā)送數(shù)據(jù)通過SendData方法進(jìn)行,發(fā)送登錄用戶名和密碼的語句如下,數(shù)據(jù)的格式為:數(shù)據(jù)含義標(biāo)記字符串+用戶名+分割標(biāo)記符+密碼+結(jié)束標(biāo)記符。

PrivateSub

WinsockClient_Connect《}

WinsockClient.SendDataLogin&TextUsername.Text&Chr

《1)&TextPassword.Text&Chr(2)EndSub

(5)接收收據(jù)

當(dāng)有數(shù)據(jù)到達(dá)時,程序會收到消息觸發(fā)DataArrival事件,所以不論服務(wù)端還是客戶端程序接收數(shù)據(jù)的工作在DataArrival事件方法中完成。具體接收數(shù)據(jù)使用GetData方法進(jìn)行,為了防止客戶端發(fā)送來的數(shù)據(jù)太多,服務(wù)端來不及處理,我定義了一個字符串?dāng)?shù)組BufferRecv,該數(shù)組與WinsockServer控件數(shù)組對應(yīng),WinsockServer(1ndex)控件收到的數(shù)據(jù)添加在BufferRecv(Index)中,然后通過結(jié)束標(biāo)記符在BufferRecv《Index)中取出一條條數(shù)據(jù)進(jìn)行分析。如果是客戶登錄,則獲取用戶名和密碼,然后通過自定義函數(shù)Lookfor在數(shù)據(jù)庫中驗證。如果驗證為合法用戶,則發(fā)送“是合法用戶”數(shù)據(jù)標(biāo)記,然后將用戶lD和用戶機(jī)器的lP等信息置于一個在線用戶信息的結(jié)構(gòu)數(shù)組中備用。然后通過自定義函數(shù)GetFriend在數(shù)據(jù)庫中獲取該用戶的所有好友ID及好友人數(shù),并根據(jù)在線用戶信息數(shù)組逐一判斷各個好友是否在線,如果在線,則將在線好友的ID及IP地址發(fā)送給剛登錄的客戶,同時也將剛登錄客戶的ID及IP地址發(fā)送給在線好友,以便他們相互之間能夠通信。如果驗證為非法用戶,,則發(fā)送“不是合法用戶”數(shù)據(jù)標(biāo)記,并將與該客戶通信用的Winsock控件卸載。

PrivateSubWinsockServer_DataArrival(IndexAsInteger,ByValbytesTotalAs

Long)

萬方數(shù)據(jù)

DimEndFlagLocAsInteger7結(jié)束標(biāo)記所處位置變量

IfIndex=0ThenExitSub

WinsockServer(Index).GetDatatmpstr,,bytesTotal

’接收收據(jù)存入tmpstr中

BufferRecv(Index)=BufferRecv(Index)&tmpstr

7將收到的數(shù)據(jù)添加在BufferRecv(Index)中

EndFlagLoc=InStr(BufferRecv(Index),Chr{2))

’在BufferRecv{Index)中尋找第一個結(jié)束標(biāo)記符的位置WhileEndFlagLoc>0

7在BufferRecv(Index)中取第一個結(jié)束標(biāo)記符左邊的數(shù)據(jù),’即第一條數(shù)據(jù).

strMsg=LeftS《BufferRecv(Index),EndFlagLoc一1)

’獲取本條數(shù)據(jù)前面的數(shù)據(jù)含義標(biāo)記字符串以分析本條數(shù)據(jù)的7含義.

SelectCaseLeftSfstrMsg,HeadLength)

CaseLogin’如果是登錄數(shù)據(jù)Dim

tmpPassWordAsString

DimtmpUserlDAsString

7通過Mid方法取得數(shù)據(jù)含義標(biāo)記字符串之后分割標(biāo)’記符之前的數(shù)據(jù).即登錄用戶名.

tmpUserlD=Mid《strMsg,HeadLength4-1,InStr{strMsg.Chr(1))一1一HeadLength)

7通過Mid方法取得分割標(biāo)記符之后的數(shù)據(jù),即登錄密碼.tmpPassWord=Mid(strMsg,InStr(strMsg,Chr(1))+1)’通過自定義函數(shù)Lookfor在數(shù)據(jù)庫中查詢該用戶名密碼是否。存在,如存在則發(fā)送含義為“是合法用戶”的數(shù)據(jù),Lookfor函’數(shù)的具體實現(xiàn)見源程序.

IfLookfor(tmpUserlD,tmpPassWord)Then

WinsockServer{Index}.SendDataIsUser&Chr(2)

DoEvents

’將客戶端的lP地址和用戶lD等信息置于一個有關(guān)在線用戶’信息的結(jié)構(gòu)數(shù)組中備用,并設(shè)置登錄標(biāo)志變量bLogined為

’True.

OntineUserlnfo(Index).IPAddr=WinsockServer《Index)

.RemoteHostlP

OnlineUserlnfofIndex).UserlD=tmpUserlD

OnlineUserlnfo(Index).bLogined=True

DimAtlFriendlDAsString

DimFriendlDAsStringDimFriendCountAs

nteger

DimTOIdFriendCOuntAsnteger

’然后通過自定義函數(shù)GetFriend在數(shù)據(jù)庫中獲取該用戶的所7有好友的ID及好友人數(shù).分別放在參數(shù)AIIFriendlD和

FriendCount中.

If

GetFriend(tmpUserlD.AlIFriendlD,FriendCount}Then

’然后根據(jù)在線用戶信息數(shù)組用InStr函數(shù)逐一判斷在線用戶’是否是該用戶的好友.

Fori=1ToMaxOnlineUser

If

OnlineUserlnfo《i).bLoginedThen

IfInStr《AIIFriendlD,On№eUserInfoli).UserlD)>0Then

’如果是,則將在線好友的ID及IP地址發(fā)送給剛登錄的客


  本文關(guān)鍵詞:QQ聊天程序的網(wǎng)絡(luò)通信原理及編程,由筆耕文化傳播整理發(fā)布。



本文編號:95196

資料下載
論文發(fā)表

本文鏈接:http://sikaile.net/kejilunwen/wltx/95196.html


Copyright(c)文論論文網(wǎng)All Rights Reserved | 網(wǎng)站地圖 |

版權(quán)申明:資料由用戶cc42b***提供,本站僅收錄摘要或目錄,作者需要刪除請E-mail郵箱bigeng88@qq.com