freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

畢業(yè)設(shè)計(jì)即時(shí)通訊系統(tǒng)設(shè)計(jì)說明書(編輯修改稿)

2025-08-30 05:24 本頁面
 

【文章內(nèi)容簡介】 了服務(wù)器的多線程,服務(wù)器端有一個(gè)進(jìn)程(或多個(gè)進(jìn)程)在指定的端口等待客戶的連接信息。一時(shí)連接成功,就可以按設(shè)計(jì)的數(shù)據(jù)交換方法和格式進(jìn)行數(shù)據(jù)傳輸??蛻舳酥辉谛枰臅r(shí)候向服務(wù)端發(fā)出連接請(qǐng)求。服務(wù)器端主窗口如圖41所示。圖41 服務(wù)器主窗口本窗體主要使用到了一個(gè)listview控件,分別用于顯示已連接用戶的ID、IP地址、名字NAME、端口號(hào)Port,2個(gè)Button控件。點(diǎn)擊“開始服務(wù)”按鈕觸發(fā)Listen _Click事件,執(zhí)行此操作后,“結(jié)束服務(wù)”按鈕的“Enabled”屬性變?yōu)椤皌rue”,“開始服務(wù)”按鈕的“Enabled”屬性變?yōu)椤癴alse”,既不再啟用這些控件,具體代碼如下:private void Listen_Click(object sender, EventArgs e) { . sockUDP1 Listen(1433)。 = false。 = true。 }其中sockUDP1 Listen(1433)表示調(diào)用sockUDP的tListen開始監(jiān)聽。點(diǎn)擊“Stop”按鈕觸發(fā)Stop _Click事件,執(zhí)行此操作后,“Stop”按鈕的“Enabled”屬性變?yōu)椤癴alse”,既重新開始啟用這些控件,其代碼如下:private void Stop_Click(object sender, EventArgs e) {()。 = true。 = false。 }()表示調(diào)用sockUDP的CloseSock停止監(jiān)聽。登錄客戶端之前要先打開服務(wù)器端的“Listener”窗體,點(diǎn)擊“開始服務(wù)”按鈕。 數(shù)據(jù)庫連接本系統(tǒng)采用的數(shù)據(jù)庫是SQL Server 2005, 首先要安裝SQL Server 2005。主要操作:安裝SQL Server 2005組件、安裝服務(wù)器、填寫本地計(jì)算機(jī)、新的SQL Server 實(shí)例或安裝客服端工具、安裝服務(wù)器和客戶端、填寫公司與名稱、接受協(xié)議、設(shè)置用戶賬戶、進(jìn)行身份驗(yàn)證等。安裝后,建立一個(gè)名為Myqq的數(shù)據(jù)庫,保存注冊的用戶信息和用戶之間的關(guān)系。在Visual Studio 2010的應(yīng)用程序中添加一個(gè)名為SqlHelp的類來連接數(shù)據(jù)庫。連接字符串為private static string conn = new SqlConnection(Data Source=.。Initial Catalog=MYqq。Integrated Security=True)。其中使用getconn函數(shù)打開連接,具體代碼如下: public void getconn() { conn = new SqlConnection(Data Source=.。Initial Catalog=MYqq。Integrated Security=True)。 try { ()。 } catch (Exception ee) { (數(shù)據(jù)庫連接錯(cuò)誤!)。 } }closeconn函數(shù)關(guān)閉連接,具體代碼如下:public void closeconn() { ()。 }getselect函數(shù)為查詢數(shù)據(jù)庫,返回查詢結(jié)果,其中g(shù)etselect具體代碼如下:public SqlDataReader getselect(string sql) {if(conn==null) getconn()。 SqlCommand cmd = new SqlCommand(sql, conn)。 SqlDataReader rs = ()。 return rs。 }Change函數(shù)為添加、刪除或修改數(shù)據(jù)庫,其中Change具體代碼如下:public int change(string sql) { int i=0。 if(conn==null) getconn()。 try{ SqlCommand cmd=new SqlCommand(sql,conn)。 i=()。 } catch(Exception ee) { ()。 } return i。 }客戶端進(jìn)行注冊、登錄、添加好友等操作都會(huì)用到數(shù)據(jù)庫,由服務(wù)器端連接數(shù)據(jù)庫獲取數(shù)據(jù)再返回給客戶端。 主要功能模塊介紹 用戶注冊服務(wù)器端:調(diào)用up_PRegist向數(shù)據(jù)庫表中添加新用戶,返回用戶狀態(tài)及id。服務(wù)器在收到客戶端的數(shù)據(jù)后,對(duì)數(shù)據(jù)進(jìn)行解析并為用戶注冊,并將返回的結(jié)果使用原socket通道發(fā)送給客戶端。關(guān)鍵代碼如下:string returnmes = 。 string regmes = new ClassSerializers().DeSerializeBinary((new ())) as string。 string []allm=(39。/39。)。 SQLhelp help = new SQLhelp()。 ()。 try { int i= (insert into userinfo(word,name) values(39。 + allm[0] + 39。,39。 + allm[2] + 39。))。} catch (Exception ee) { ()。 } try { SqlDataReader rs2 = (select top 1 * from userinfo order by UserID desc)。 if () { ()。 returnmes= (0).ToString()。 } ()。 } catch (Exception ee) { ()。 } ()。 ClassMsg msg3 = new ClassMsg(8, , new ClassSerializers().SerializeBinary(returnmes).ToArray())。 SendMsgToOne((allm[3]), (allm[4]), msg3)。注冊頁面如圖42所示。用戶注冊包括填寫用戶賬號(hào),密碼,名字等,如果用戶填寫的信息有誤,如:兩次輸入的密碼不相同,系統(tǒng)將提示注冊有誤,則需要重新填寫信息。本窗體主要使用了4個(gè)Label控件,分別用于顯示密碼、確認(rèn)密碼以及名字;2個(gè)Button控件用于確認(rèn)注冊與取消,3個(gè)TextBox控件用于注冊時(shí)用戶填寫密碼、確認(rèn)密碼以及名字等信息。點(diǎn)擊“提交”按鈕觸發(fā)btnSubmit_Click事件,客戶端驗(yàn)證注冊信息正確以后便向服務(wù)器發(fā)送注冊請(qǐng)求,服務(wù)器驗(yàn)證信息后便在用戶表中插入新用戶數(shù)據(jù),便自動(dòng)生成ID號(hào),最后將ID返回到客戶端,用戶便可根據(jù)此ID進(jìn)行登錄聊天系統(tǒng),其中btnSubmit_Click事件具體代碼如下: 圖42 用戶注冊界面private void btnSubmit_Click(object sender, EventArgs e){ if ( == || == ) { (密碼不能為空!)。 } else if ( != ) { (兩次輸入密碼不一樣!)。 } else if ( 6 || 6) { (密碼不能少于五位!)。 } else { ClassMsg msg = new ClassMsg(3, , new ClassSerializers().SerializeBinary( + / + + / + + / + + / + ()).ToArray())。 sendMsgToServer(msg)。 = 請(qǐng)稍等。 } }通過判斷密碼是否為空、兩次密碼是否一致已經(jīng)密碼是否少于五位來驗(yàn)證用戶輸入信息的準(zhǔn)確性,當(dāng)通過驗(yàn)證后,則調(diào)用sendMsgToServer函數(shù)向服務(wù)器發(fā)送注冊請(qǐng)求。最后清空各個(gè)輸入框中字符。根據(jù)服務(wù)器返回的結(jié)果彈出對(duì)應(yīng)的MessageBox對(duì)話框,回復(fù)到登陸窗口。sendMsgToServer函數(shù)的實(shí)現(xiàn)方法如下:public void sendMsgToServer(ClassMsg msg) { (, , new ClassSerializers().SerializeBinary(msg).ToArray())。 } 用戶登錄服務(wù)器獲得客戶端發(fā)送來的用戶名和密碼,然后查詢數(shù)據(jù)庫的相應(yīng)的用戶列表,如果該用戶不存在或用戶名與密碼不匹配服務(wù)器將驗(yàn)證失敗的結(jié)果還回給客戶端,驗(yàn)證過程終止。如果驗(yàn)證通過,則成功登錄系統(tǒng),登錄認(rèn)證的流程如圖43所示。ServerClient登錄信息加密后發(fā)送登錄成功驗(yàn)證返回好友列表與在線好友信息成功記錄用戶IP信息離線發(fā)送離線消息圖43 用戶登錄認(rèn)證流程圖服務(wù)器端:服務(wù)器端在收到來自客戶端的數(shù)據(jù)后解析數(shù)據(jù)包,當(dāng)識(shí)別數(shù)據(jù)模式為登陸時(shí),則調(diào)用NewUserLogin函數(shù)處理登錄邏輯。在這個(gè)函數(shù)里面主要將輸入的參數(shù)通過對(duì)密碼進(jìn)行MD5解密再從讀取用戶表中是否存在這樣唯一的一個(gè)用戶名與密碼匹配,最后將該用戶的好友列表與在線好友列表發(fā)送給客戶端并通知其所有好友該用戶上線,同時(shí)在listview添加一條在線用戶信息,NewUserLogin關(guān)鍵代碼如下: public void NewUserLogin(ClassMsg msg, Ip, int Port) { ClassUserInfo info = new ClassSerializers().DeSerializeBinary((new ())) as ClassUserInfo。 MD5 md5 = new MD5()。 string userID = (, )。 string word = (, )。 SQLhelp help = new SQLhelp()。 SqlDataReader rs = (select word from userinfo where userID=39。 + userID + 39。)。 if () { ()。 string word2 = (0)。 if (word == word2) { ()。 rs = (select userID,name from userinfo where userID=39。 + userID + 39。)。 if () { ()。ListViewItem((0)
點(diǎn)擊復(fù)制文檔內(nèi)容
法律信息相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1