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

正文內(nèi)容

基于tcp協(xié)議的簡單即時(shí)通信軟件的設(shè)計(jì)與實(shí)現(xiàn)-在線瀏覽

2025-07-18 12:00本頁面
  

【正文】 可以從這個(gè)基類繼承。外部源還可以是代碼中的一個(gè)變量,使用流在變量之間傳輸數(shù)據(jù)的技術(shù)是一個(gè)非常有用的技巧,可以在數(shù)據(jù)類型之間轉(zhuǎn)換。即可以使用NetworkStream通訊網(wǎng)絡(luò)套接字用標(biāo)準(zhǔn)的流操作進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)的讀寫。 同步、異步、阻塞和非阻塞 同步(synchronous):所謂同步方式,就是發(fā)送方發(fā)送數(shù)據(jù)包以后,不等接受方響應(yīng),就接著發(fā)送下一個(gè)數(shù)據(jù)包。阻塞(Block):指執(zhí)行此套接字的網(wǎng)絡(luò)調(diào)用時(shí),直到調(diào)用成功才返回,否則此套節(jié)字就一直阻塞在網(wǎng)絡(luò)調(diào)用上,比如調(diào)用StreamReader 類的Readlin ( )方法讀取網(wǎng)絡(luò)緩沖區(qū)中的數(shù)據(jù),如果調(diào)用的時(shí)候沒有數(shù)據(jù)到達(dá),那么此Readlin ( )方法將一直掛在調(diào)用上,直到讀到一些數(shù)據(jù),此函數(shù)調(diào)用才返回非阻塞(Unblock):指在執(zhí)行此套接字的網(wǎng)絡(luò)調(diào)用時(shí),不管是否執(zhí)行成功,都立即返回。在Windows網(wǎng)絡(luò)通信軟件開發(fā)中,最為常用的方法就是異步非阻塞套接字。其實(shí)在用C#進(jìn)行網(wǎng)絡(luò)編程中,我們并不需要了解什么同步、異步、阻塞和非阻塞的原理和工作機(jī)制, FrameWrok SDK中已經(jīng)已經(jīng)把這些機(jī)制給封裝好了。C/S計(jì)算技術(shù)在信息產(chǎn)業(yè)當(dāng)中占有重要的地位。該模式的基本思想是把集中在一起的應(yīng)用劃分成為功能不同的兩個(gè)部分,分別在不同的計(jì)算機(jī)上運(yùn)行,通過它們之間的分工合作來實(shí)現(xiàn)一個(gè)完整的功能。 在此“服務(wù)器”是指能在網(wǎng)絡(luò)上提供服務(wù)的任何程序。對(duì)于簡單的服務(wù),把每個(gè)請(qǐng)求用一個(gè)IP數(shù)據(jù)報(bào)發(fā)給服務(wù)器,服務(wù)器用另一個(gè)數(shù)據(jù)報(bào)返回響應(yīng)。當(dāng)一臺(tái)連入網(wǎng)絡(luò)的計(jì)算機(jī)向其他計(jì)算機(jī)提供各種網(wǎng)絡(luò)服務(wù)(如數(shù)據(jù)、文件的共享等)時(shí),它就被叫做服務(wù)器。嚴(yán)格說來,客戶機(jī)/服務(wù)器模型并不是從物理分布的角度來定義,它所體現(xiàn)的是一種網(wǎng)絡(luò)數(shù)據(jù)訪問的實(shí)現(xiàn)方式。如賓館、酒店的客房登記、結(jié)算系統(tǒng),超市的POS系統(tǒng),銀行、郵電的網(wǎng)絡(luò)系統(tǒng)等。 即時(shí)通信協(xié)議協(xié)議是一系列的步驟,它包括雙方或者多方,設(shè)計(jì)它的目的是要完成一項(xiàng)任務(wù)。協(xié)議必須是雙方或者多方參與的,一方單獨(dú)完成的就不算協(xié)議。這些信息的格式必須是協(xié)議參與方同意并且遵循的。對(duì)每種可能的情況必須規(guī)定具體的動(dòng)作。為了創(chuàng)建即時(shí)通信的統(tǒng)一標(biāo)準(zhǔn),人們經(jīng)過了多次嘗試:IETF 的對(duì)話初始協(xié)議(SIP)和 即時(shí)通信對(duì)話初始協(xié)議和表示擴(kuò)展協(xié)議(SIMPLE)、應(yīng)用交換協(xié)議(APEX)、顯示和即時(shí)通信協(xié)議(PRIM)及基于 XML 且開放的可擴(kuò)展通信和表示協(xié)議(XMPP)協(xié)議(常稱為 Jabber 協(xié)議)。 本系統(tǒng)目的在于實(shí)現(xiàn)一個(gè)簡單的即時(shí)通信過程,沒有必要采用通用的比較復(fù)雜的即時(shí)通信協(xié)議,因此使用了簡單定義的XML標(biāo)記定義來規(guī)范即時(shí)通信的各種網(wǎng)絡(luò)信息,在網(wǎng)絡(luò)中傳輸序列化的XML語言。需要分別實(shí)現(xiàn)服務(wù)器端和客戶端的軟件設(shè)計(jì)。客戶端發(fā)起主動(dòng)連接,向服務(wù)器請(qǐng)求登錄或者注冊(cè)??蛻舳酥g可以發(fā)起P2P模式的聊天,可以傳送文件。為了減輕服務(wù)器負(fù)擔(dān),客戶端之間的信息傳遞是采用P2P模式的,服務(wù)器只負(fù)責(zé)用戶的注冊(cè),登錄和用戶在線狀態(tài)的檢驗(yàn)。2. 登錄:(1) 客戶可以輸入賬號(hào)和密碼進(jìn)行登錄,客戶端會(huì)發(fā)送登錄信息等待服務(wù)器響應(yīng),登錄成功后會(huì)發(fā)出登錄成功信息并刷新好友列表。(2) 好友列表:可以對(duì)好友列表進(jìn)行添加刪除等動(dòng)作5. 文件傳輸:(1) 文件傳輸:文件傳輸功能SERVER:1. 注冊(cè)回應(yīng):對(duì)客戶端傳送的注冊(cè)信息進(jìn)行判斷。用戶與用戶之間的關(guān)系是較為特殊的遞歸關(guān)系,即描述發(fā)生在兩個(gè)相同實(shí)體上的關(guān)系。詳細(xì)設(shè)計(jì)見下面兩表:表1 用戶信息表TCP_UserInfoTCP_Userinfo列(屬性)名類型主鍵寬度是否允許為空備注UserIDnumericY9NOT NULL自增長UserAccountncharN20NOT NULL用戶帳號(hào)UserNicknamencharN20NOT NULL用戶昵稱,可重復(fù)UserEmailncharN20NOT NULL用戶EMAILJoinDatencharN35NOT NULL注冊(cè)日期LastLoginncharY20NOT NULL最后登錄IPUserIPncharY20NOT NULL用戶IPUserFavvarcharN100NOT NULL用戶好友分組,有默認(rèn)值UserQuestionncharY20NOT NULL密碼問題UserAnswerncharY20NOT NULL密碼答案UserPasswordncharN20NOT NULL用戶密碼UserOnlineintN4NOT NULL在線狀態(tài),1在,0不在表2 用戶好友表TCP_FriendInfoTCP_Userinfo列(屬性)名類型主鍵寬度是否允許為空備注InfoIDnumericY9NOT NULL自增長UserIDncharN20NOT NULL用戶IDFriendIDncharN20NOT NULL用戶好友IDFriendGroupncharN20NOT NULL用戶好友分組4 系統(tǒng)實(shí)現(xiàn) 使用XML定義的即時(shí)通信協(xié)議 amp。: [Serializable] public class UMessage { public UMessage(){ } private string _nickname。 private string _accounts。 private int _info。 private int _fn。 public string Nickname { get { return _nickname。 } } public string Password { get { return _password。 } } public string Accounts { get { return _accounts。 } } public string Email { get { return _。 } } public int Info { get { return _info。 } } public Friend[] Fri { get { return _friend。 } } public int Fn { get { return _fn。 } } public string Fg { get { return _fg。 } } },在此不再詳述。代碼如下: region 將登錄信息轉(zhuǎn)為UMessage private void Traslator() { =。 =。 =1。 } endregion 數(shù)據(jù)結(jié)構(gòu)FriendStruct服務(wù)器如果保存和傳遞用戶的好友信息是難點(diǎn)之一。在數(shù)據(jù)庫方面,每個(gè)用戶擁有各自的好友分組信息(UserFav),分組中間使用“,”分隔,在TCP_FriendInfo表中則分別保存了用戶ID和好友ID,使用一個(gè)INT字段保存分組信息。代碼如下:select * from TCP_UserInfo join TCP_FriendInfo on =39。 and =在好友信息的傳輸方面,首先定義一個(gè)FriendStruct數(shù)據(jù)結(jié)構(gòu)(當(dāng)然也可以用枚舉完成)如下:using System。 using 。//接收和拒絕信息,1為接收,2為拒絕,3為取消 public string filename。 } } public struct Friend { public string account。 public string IP。 public string fg。在C中使用DATAREADER語句可以逐句讀取數(shù)據(jù)庫查詢的結(jié)果,再依次將結(jié)果賦值FriendStruct數(shù)組元素,就得到了便于發(fā)送和讀取的存放好友信息的數(shù)組。 ff[i].IP = getf[UserIP].ToString()。 ff[i].status = getf[UserOnline].ToString()。 i++。 數(shù)據(jù)庫連接類實(shí)現(xiàn)一個(gè)快捷簡單的數(shù)據(jù)庫連接的相關(guān)代碼是非常有必要的。本設(shè)計(jì)使用了一個(gè)簡單的類()實(shí)現(xiàn)了簡單快捷的數(shù)據(jù)庫連接和讀取。uid=sa。database=TCPDB)。 SqlCommand cmd = new SqlCommand(sql, connstr)。 try { sqldr = ()。 } return sqldr。 SqlCommand sqlcmd = new SqlCommand(sql, connstr)。 ()。 } catch (Exception e) { if (e != null) errorstr = ()。 return errorstr。 服務(wù)器端這里顯示傳入的原始信息服務(wù)器端的界面設(shè)計(jì)是基于便于測(cè)試的目的而實(shí)現(xiàn)的。主要代碼如下:開啟監(jiān)聽端口: public void Serve() { int port = 8888。 s = new Socket(, , )。 (10)。以下代碼讀取連入的連接,依次將連接加入可變長數(shù)組alsock,并且讀取傳入的信息,進(jìn)行反串行化: while (true) { try { uc = ()。 ((uc))。 int rect = (data)。 (data, 0, chat, 0, rect)。 int info = 。 SqlDataReader usdr = (select * from TCP_UserInfo where UserAccount=39。, )。 (chat)。 Socket sc = (Socket)alSock[(uc, 0)]。 + + 39。 + + 39。 + + 39。 + () + 39。 + ((IPEndPoint)).() + 39。 + + 3
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1