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

正文內(nèi)容

aspnet論文基于tcp協(xié)議的簡單即時通信軟件的設(shè)計與實現(xiàn)cs-資料下載頁

2024-10-13 19:01本頁面

【導(dǎo)讀】等優(yōu)點而受到廣泛的使用。設(shè)計并實現(xiàn)一個能夠處理多用戶進(jìn)行實時、安全的即時。通信系統(tǒng)具有較強(qiáng)的現(xiàn)實意義。即時通信的底層通信是通過SOCKET套接字接口實現(xiàn)。當(dāng)前的主流UNIX系統(tǒng)和微軟的WINDOWS系統(tǒng)都在內(nèi)核提供了對SOCKET字接口。使用這個統(tǒng)一的接口,可以編寫一個可移植的TCP/IP通信程序。夠在INTERNET上可靠的傳輸。存和心跳報文的發(fā)送??蛻舳瞬捎肞2P方式實現(xiàn)消息傳遞,并能實現(xiàn)文件的傳輸。

  

【正文】 byte[] d = new byte[]。 (0, )。 (d, 0, )。 第 17 頁 共 28 頁 (d)。 } endregion } ()。 } } endregion 如果發(fā)現(xiàn)用戶發(fā)送的是登錄信息,就根據(jù)登錄信息中的用戶名和密碼判斷是否存在用戶,密碼是否正確,成功后再查詢出用戶的好友信息并且賦值給FriendStruct,再將信息返回給客戶端: region 處理用戶 登錄 信息 else if (info == 1)//分辨出用戶發(fā)送的是 登錄 信息 { string Accounts = 。 string Password = 。 SqlDataReader usdr = (select * from TCP_UserInfo where UserAccount=39。 + Accounts + 39。 and UserPassword=39。+Password+39。, )。 if (usdr != null) { if (()) { string uid=usdr[UserID].ToString()。 = usdr[UserFav].ToString()。 ()。 SqlDataAdapter sdr = new SqlDataAdapter(select * from TCP_UserInfo join TCP_FriendInfo on =39。 + uid + 39。 and =, )。 DataSet ds = new DataSet()。 (ds, find)。 int xxx=[find].。 (update TCP_UserInfo set UserIP=39。 + ((IPEndPoint)).() + 39。 , UserOnline=1 where UserAccount=39。 + Accounts + 39。, )。 ff=new Friend[xxx]。 int i=0。 SqlDataReader getf = (select * from TCP_UserInfo join TCP_FriendInfo on =39。 + uid + 39。 and =, )。 while (()) { ff[i].account=getf[UserAccount].ToString()。 ff[i].IP = getf[UserIP].ToString()。 ff[i].nickname = getf[UserNickname].ToString()。 第 18 頁 共 28 頁 ff[i].status = getf[UserOnline].ToString()。 ff[i].fg = getf[FriendGroup].ToString()。 i++。 } ()。 region 此處寫入 登錄 成功代碼 Stream ms = new MemoryStream()。 Socket sc = (Socket)alSock[(uc, 0)]。 ((uc).ToString())。 = 11。 = ff。 = xxx。 (ms, umessage)。 byte[] d = new byte[]。 (0, )。 (d, 0, )。 (d)。 //在 tb_status中寫入服務(wù)器返回給客戶端的代碼便于測試觀察 ((d))。 endregion } else { ()。 region 此處寫入 登錄 失敗代碼 Stream ms = new MemoryStream()。 Socket sc = (Socket)alSock[(uc, 0)]。 = 10。 (ms, umessage)。 byte[] d = new byte[]。 (0, )。 (d, 0, )。 (d)。 endregion } } } endregion Tb_states是個用于監(jiān)視 SOCKET傳入信息的文本框,便于觀察和測試相關(guān)信息: ([ + () + ] + (chat))。 } catch (Exception ex) 第 19 頁 共 28 頁 { ()。 } } } 以上代碼也包含了對客戶端的請求信息的判斷和對客戶端返回信息的生成和傳輸。 多線程 對于服務(wù)器來說,多線程是必不可少的,否則它將無法處理不斷請求的新連接。C的 提供了多線程編程的支持。本設(shè)計實現(xiàn)代碼如下: = new Thread(new ThreadStart(Serve))。//新建一個用于監(jiān)聽的線程 ()。//打開新線程 不僅僅是服務(wù)器,基于 P2P 模式聊天的客戶端也必須支持多線程運(yùn)行, 實現(xiàn)代碼與之類似 ,在客戶端設(shè)計說明中將不再敘述。 計時器 計時器用于實現(xiàn)心跳報文的功能,服務(wù)器在啟動以后就開始計時,每隔一定時間就向所有連入的客戶端發(fā)送信息,核心代碼如下: //用計時器檢查客戶端是否掉線 aTimer = new ()。 += new ElapsedEventHandler(CheckStatus)。 // 設(shè)置引發(fā)時間的時間間隔 此處設(shè)置為 5秒(5000毫秒) = 5000。 = true。 CheckStatus 就是用于向客戶端發(fā)送檢查信息的方法,它會向遍歷連入的客戶端 (alSock),然后依次向客戶端發(fā)送信息 ,如果發(fā)現(xiàn)客戶端沒有響應(yīng),就會如果發(fā)現(xiàn)對方無回應(yīng),則關(guān)閉相應(yīng)的 SOCKET,并更新數(shù)據(jù)庫的用戶在線 狀態(tài),同時向該用戶的所有好友發(fā)送用戶已下線的通知。 第 20 頁 共 28 頁 客戶端 圖 5 注冊界面 圖 6 登錄、聊天、文件傳輸界面 同步套接字客戶端 客戶端發(fā)起同步套接字連接,并傳送登錄或者注冊信息,由于兩者方式類似,這里僅列出用戶登錄的代碼: region 發(fā)送服務(wù)器 登錄 信息,并接收服務(wù)器反饋信息 public void Client() { 建立 SOCKET 發(fā)送信息 : try { IPEndPoint ServerIPEP = new IPEndPoint((),8888)。 好友詳細(xì)信息列表 聊天信息 第 21 頁 共 28 頁 c = new Socket(,)。 ((EndPoint)ServerIPEP)。 s = new MemoryStream()。 (s,_message)。 byte[] d=new byte[]。 (0, )。 (d, 0, )。 int i = (d, 0, , )。 } catch(Exception ex) { ()。 } 以下代碼讀取了服務(wù)器返回給客戶端的信息(注冊和登錄的成功與失?。?,如果返回了登錄成功的信息,還會讀取服務(wù)器給出的 FriendStruct 結(jié)構(gòu)以得到用戶的 好友信息: region 接收反饋信息 byte[] data = new byte[2048]。 while(true) { int rect = (data)。 byte[] chat = new byte[rect]。 (data,0,chat,0,rect)。 UMessage bumessage = (UMessage)(new MemoryStream(chat
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1