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

正文內(nèi)容

畢業(yè)設(shè)計(jì)---局域網(wǎng)即時(shí)通信軟件設(shè)計(jì)-資料下載頁

2024-12-01 18:04本頁面

【導(dǎo)讀】都具有一定的實(shí)用價(jià)值。它具有信息收發(fā)速度快,保密性好,占用網(wǎng)絡(luò)帶寬資源低,占?;疽螅?.完成該軟件主要功能的開發(fā)設(shè)計(jì);進(jìn)度安排:第4周末,確定論文題目;第7周末,提交論文提綱;第15周,提交論文終稿并準(zhǔn)備答辯。的應(yīng)用仍遠(yuǎn)未普及。鑒于即時(shí)通信作為一項(xiàng)有廣泛應(yīng)用價(jià)值的技術(shù)框架,在逐步適應(yīng)。該系統(tǒng)使用.NET作為開發(fā)平臺、Mysql數(shù)據(jù)庫存儲用戶信息和聊天記錄,用。套接字連接客戶端和服務(wù)器,用數(shù)據(jù)包套接字發(fā)送消息。本系統(tǒng)采用C/S模式構(gòu)建,由客戶端和服務(wù)器端組成??蛻舳酥灰顚懛?wù)器的IP地址和通信端口號,并通過。所分配的賬號,就可以登錄和使用。服務(wù)器與Mysql數(shù)據(jù)庫可部署在同一網(wǎng)段的任。度的保證了數(shù)據(jù)庫的安全性。[關(guān)鍵詞].NETFramework;Socket;多線程;Mysql數(shù)據(jù)庫;TCP/IP協(xié)議;

  

【正文】 消息內(nèi)容顯示在消息框內(nèi),如圖 35 所示: 圖 35 接收消息框 同樣可在下側(cè)回復(fù)框內(nèi)填寫回復(fù)消息,點(diǎn)擊“發(fā)送”按鈕,向?qū)Ψ桨l(fā)送回復(fù)消息,代碼如下所示: if (dr == ) { Msg = 。 string cmd = CHAT| + userName + | + FromUser + | + Msg + |。//格式為 :CHAT|本用戶名 |對方用戶名 |內(nèi)容 Byte[] outbytes = (())。 //將指令發(fā)送給服務(wù)器 (outbytes, 0, )。 } 若點(diǎn)擊關(guān)閉按鈕,客戶端不做任何操作。至此,聊天功能全部介紹完畢。 查詢聊天記錄功能 當(dāng)用戶不在線時(shí),便不能及時(shí)收到消息,只能在再次上線后通過查詢聊天記錄功能查詢離線消息。在服務(wù)器所在計(jì)算機(jī)的數(shù)據(jù)庫中,存儲著所有用戶的所有在線離線消息,為日后的查詢提供了可能。 鼠標(biāo)在用戶列表中 單擊需要查詢歷史記錄的用戶名稱,然后單擊“聊天記錄”按鈕,客戶端創(chuàng)建字符串,以“ QUERYLOGS”為前綴,并將此用戶用戶名,對方用戶名加入字符串,發(fā)送給服務(wù)器。字符格式為“ QUERYLOGS|此機(jī)用戶名 |對方用戶名 |”。編寫代碼如下所示: private void btnQuery_Click(object sender, EventArgs e) { if (userLogs == ) { (請先選擇好友 ,再進(jìn)行查詢 , 提示 )。 return。 } //格式為 :QUERY|本用戶名 |對方用戶名 string cmd = QUERYLOGS| + userName + | + userLogs + |。 Byte[] outbytes = (())。 //將指令發(fā)送給服務(wù)器 (outbytes, 0, )。 } 將上述字符串發(fā)送給服務(wù)器后,經(jīng)過服務(wù)器處理,將會發(fā)回 DataSet 數(shù)據(jù),客戶端收到此消息指令后,將 DataSet 中名稱為“ QUERYLOGS” 的 DataTable 的數(shù)據(jù)展示在彈出窗體的 dataGridView 中。 在接收服務(wù)器指令的系統(tǒng)副進(jìn)程中,客戶端分析服務(wù)器發(fā)回的消息指令,處理后彈出新窗體的代碼如下所示: if ([0].TableName == QUERYLOGS) { frmQueryLogs frm = new frmQueryLogs()。 = userName。 = userLogs。 = DS。 ()。 } 編寫上述代碼中所彈出的新窗體,窗體中加入 dataGridView 控件,窗體標(biāo)題為“與XXX 的聊天記錄”,“ XXX”為對方用戶名。 dataGridView 控件內(nèi)顯示有發(fā)送方、接收方、發(fā)送時(shí)間、內(nèi)容四個(gè)字段。其中發(fā)送時(shí)間精確到毫秒。聊天記錄窗體顯 示如圖 36 所示: 圖 36 聊天記錄窗體 上圖窗體內(nèi)在 Form_Load 事件內(nèi)編寫代碼設(shè)置窗體標(biāo)題, dataGridView 控件的數(shù)據(jù)源、各列顯示名稱。代碼如下: private void frmQueryLogs_Load(object sender, EventArgs e) { = 與好友 : + _toUser + 的聊天記錄 。 = [0]。 [0].HeaderText = 發(fā)送方 :。 [1].HeaderText = 接受方 :。 [2].HeaderText = 發(fā)送時(shí)間 :。 [3].HeaderText = 內(nèi)容 :。 [3].Width = 300。 } 用戶離線 當(dāng)用戶離線時(shí),服務(wù)器及時(shí)作出反應(yīng),將此用戶狀態(tài)置為離線。并將離線消息發(fā)送給其他在線用戶,以便在線用戶更新在線用戶列表。 發(fā)送離線請求 當(dāng)用戶離線時(shí),點(diǎn)擊主操作界面的“退出”按鈕,客戶端創(chuàng)建離線請求字符串,并以“ EXIT”作為前綴,并加入此用戶用戶名。字符串格式為“ EXIT|用戶名 |”,并將此請求發(fā)送給服務(wù)器,然后關(guān)閉主 操作界面窗體,實(shí)現(xiàn)代碼如下: private void btnExit_Click(object sender, EventArgs e) { string cmd = EXIT| + userName + |。 Byte[] outbytes = (())。 (outbytes, 0, )。//將指令發(fā)送給服務(wù)器 ()。 } 接收用戶離線消息 當(dāng)其他用戶離線時(shí),服務(wù)器創(chuàng)建字符串,以“ EXIT”作為前綴。在客戶端接收進(jìn)程內(nèi),將收到的指令處理后放入 token 字符串?dāng)?shù)組,數(shù)組的 token[1]內(nèi)存放離線用戶用戶名,通過委托與編寫的 SetUserOfflineList 函數(shù),將離線用戶更新為離線狀態(tài),委托與SetUserOfflineList 函數(shù)如下所示: private delegate void SetUsersListDelOffline(string[] token)。//離線用戶 private void SetUserOffline(string[] token) { (new SetUsersListDelOffline(SetUserOfflineList), new object[] { token })。 } //更新 離線用戶列表 private void SetUserOfflineList(string[] token) { string _user = token[1]。 foreach (TreeNode tn in ) { foreach (TreeNode _tn in ) { if ( == _user) { = 4。//離線標(biāo)志 } } } } 在接受進(jìn)程內(nèi)調(diào)用委托代碼如下所示: else if (token[0] == EXIT) { SetUserOffline(token)。 } 報(bào)錯(cuò)功能 當(dāng)服務(wù)器在按照客戶端請求進(jìn)行相應(yīng)操作時(shí),若遇到錯(cuò)誤,立刻將錯(cuò)誤信息發(fā)送回客戶端。此類指令的格式為“ ERROR|錯(cuò)誤信息”。客戶端接收此類指令后,立刻彈出消息框顯示錯(cuò)誤信息。如圖 37 為服務(wù)器斷開連接后客戶端接收的“錯(cuò)誤”指令: 圖 37 錯(cuò)誤指令消息框 至此,客戶端的介紹已全部結(jié)束。 啟動服務(wù) 聲明變量 聲明一個(gè) Hashtable 用以存放用戶連接 ,其中鍵中存放用戶名,值為此用戶的連接信息。以便服務(wù)器向各個(gè)特定連接發(fā)送指定的消息。 聲明類 用于從 TCP網(wǎng)絡(luò)客戶端監(jiān)聽連接。 聲明代碼如下: internal static Hashtable htUsers = new Hashtable()。//用于存放用戶 TcpListener tcpListener。//監(jiān)聽連接 (服務(wù)端 ) 顯示服務(wù)器 IP 由服務(wù)器計(jì)算機(jī)查詢出本機(jī) IP 地址,以便客戶端 設(shè)置服務(wù)器 IP,具體實(shí)現(xiàn)方法為:獲取本機(jī)主機(jī)名,然后將主機(jī)名解析為 實(shí)例,并將與主機(jī)關(guān)聯(lián)的 IP之地列表中有效的 IP 地址字符串轉(zhuǎn)換為 IPAddress 實(shí)例,最后顯示在窗體文本框上。 具體代碼實(shí)現(xiàn)如下所示: string local = ()。//主機(jī)名 IPHostEntry entry = (local)。//解析主機(jī)名 string ips = [1].ToString()。 IPAddress ip = (ips)。 = ips。//顯示 IP 文本框 啟動服務(wù) 填寫用于通信的端口號,并用指定的地址和端口號初始化 IPEndPoint 類新實(shí)例,將網(wǎng)絡(luò)斷電表示為 IP地址和端口號。以此初始化 TcpListener 類的新實(shí)例,并啟動。 啟動后設(shè)置 IP地址及端 口號文本框?yàn)橹蛔x狀態(tài),設(shè)置“開始”按鈕為不可用狀態(tài)。 實(shí)現(xiàn)代碼如下所示: IPAddress serverIP = ()。 int DK = ()。//端口號 IPEndPoint ipP = new IPEndPoint(serverIP, DK)。 tcpListener = new TcpListener(ipP)。 ()。//開始監(jiān)聽 (服務(wù)啟動 )。 = true。 = true。 = false。 點(diǎn)擊“啟動服務(wù)”按鈕時(shí), 服務(wù)器操作界面如圖 41 所示: 圖 41 服務(wù)器操作界面 監(jiān)聽客戶端請求 服務(wù)啟動后,啟動新線程,調(diào)用 Listening 函數(shù),用以監(jiān)聽客戶端請求。代碼實(shí)現(xiàn)如下所示: ThreadStart strartLis = new ThreadStart()。 Thread threadLis = new Thread(strartLis)。 ()。 在解決資源管理器中添加新類 Client,用以實(shí)現(xiàn)和客戶端聯(lián)系的功能。 在監(jiān)聽的連接中若存在掛起的連接請求,實(shí)例化 Socket 類新實(shí)例,實(shí)現(xiàn) Berkeley 套接字接口,并以此實(shí)例化 Client 類新實(shí)例,啟動新線程調(diào)用此新實(shí)例的 SERVICE 函數(shù),用以分析、處理用戶請求。 代碼實(shí)現(xiàn)如下所示: Socket socket = ()。 //新線程 ,用于分析接收到的消息 ,并分析 ,做出 相應(yīng)操作 Client clientNow = new Client(this, socket)。 ThreadStart inceptStart =
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1