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

正文內(nèi)容

基于tcp的網(wǎng)絡(luò)通信協(xié)議設(shè)計畢業(yè)論文(編輯修改稿)

2025-06-23 18:09 本頁面
 

【文章內(nèi)容簡介】 的電腦無論是硬件還是軟件都能夠滿足條件,因此,本系統(tǒng)在運(yùn)行上是可行的。綜上所述,本系統(tǒng)的設(shè)計與開發(fā)在技術(shù)上和硬件設(shè)備上的條件都是滿足的,因此,它是可行的。第五章 概要設(shè)計第五章 概要設(shè)計 性能要求 隨著網(wǎng)絡(luò)的發(fā)展,不同的開發(fā)商開發(fā)了不同的即時通訊的應(yīng)用協(xié)議。為了使通信成功可靠,網(wǎng)絡(luò)中的同一種即時通訊軟件,都必須使用同一語言,不能帶有方言。因而必須嚴(yán)格的定義不同用戶之間的每個包中每個字節(jié)中的每一位。這些協(xié)議絕大多數(shù)建立在TCP/IP協(xié)議族上,約定好通用的通信方式、語義、及數(shù)據(jù)格式,即即時通訊應(yīng)用協(xié)議。已經(jīng)開發(fā)的眾多協(xié)議中筆者認(rèn)為較為成功的當(dāng)屬、微信、淘寶旺旺等。不同的開發(fā)商因即時通訊軟件的應(yīng)用重心不同,其協(xié)議的側(cè)重點也不同,且絕大多數(shù)為廠商保密。本協(xié)議的設(shè)計旨在開發(fā)一開放的、安全的、可擴(kuò)展的、易于程序開發(fā)的即使通訊軟件協(xié)議。,筆者認(rèn)為有幾點必須考慮:(1) 協(xié)議對下層協(xié)議的支持考慮到程序開發(fā)者對下層協(xié)議選擇上有不同的看法,協(xié)議設(shè)計時必須考慮下層的協(xié)議,以便程序開發(fā)者根據(jù)不同的下層協(xié)議運(yùn)用不同的傳輸手段。(2)數(shù)據(jù)的保密由于即時通訊軟件的不同需求,開發(fā)者可能要對傳輸?shù)臄?shù)據(jù)進(jìn)行加密,因此在協(xié)議中應(yīng)該對數(shù)據(jù)是否加密、加密算法留有標(biāo)記。本次協(xié)議設(shè)計未實現(xiàn)這一點。(3) 傳輸可靠性:由于網(wǎng)絡(luò)傳輸?shù)牟环€(wěn)定性,根據(jù)經(jīng)驗大于1024byte的包較小于1024byte的包更易丟失,因此在應(yīng)用層傳給傳輸層的包應(yīng)小于1000byte,而實際的數(shù)據(jù)包往往大于1000byte,,只是通過限制傳輸?shù)臄?shù)據(jù)來機(jī)械的控制了這一點。(4)協(xié)議的通用性與可擴(kuò)展性:由于無法對新技術(shù)的發(fā)展有精確的把握應(yīng)在協(xié)議中留有冗余位,以便適應(yīng)新的應(yīng)用。(5)協(xié)議的簡潔高效性:協(xié)議的設(shè)計不應(yīng)過于復(fù)雜,應(yīng)給程序員開發(fā)程序留有”自由空間”。 通訊協(xié)議格式設(shè)計此通訊協(xié)議具體格式,包括判斷消息屬于哪個類型、消息發(fā)送者、消息接收者、發(fā)送數(shù)據(jù)、消息長度共5部分,其字節(jié)分配如圖所示與表示的含義:標(biāo)識funsender[28]RecerverID[28]Connect[1024]Len數(shù)據(jù)類型enum(FUN)char char char int含義消息類型發(fā)送者接受者發(fā)送數(shù)據(jù)消息長度長度(byte)4282810244西安工程大學(xué)學(xué)士學(xué)位論文(1) fun功能標(biāo)識定義為枚舉類型(enum),占4個byte。用它來聲明一組命名的常數(shù),當(dāng)一個變量有幾種可能的取值時,可以將它定義為枚舉類型,在win32機(jī)器上,枚舉類型所占字節(jié)數(shù)總是4byte,在上面代碼片段中sizeof(enum)。sizeof(FUN),sizeof(LOGIN)都是4byte。(2) Fun分別包括LOGIN,LOGOUT,LOGOK,LOGERR,SHAKE,TRANSMIT,SVRSTOP,ERRL。lLOGIN表示用戶登錄,LOGOUT表示用戶退出,LOGOK表示用戶登陸成功,LOGERR表示用戶登陸失敗,SHAKE表示震動,TRANSNIT表示信息傳輸,SRRSTOP表示服務(wù)器停止,ERR表示數(shù)據(jù)傳送出錯。(2) senderID是發(fā)送者的標(biāo)識,用以標(biāo)記信息的來源ID;(3) RecerverID是接收者的標(biāo)識,用以標(biāo)記信息的目的ID;(4) Connect是要傳輸?shù)臄?shù)據(jù);(5) Len記錄了傳輸數(shù)據(jù)的長度,用于在服務(wù)器端進(jìn)行簡單校驗,如果出錯,則提醒發(fā)送者傳輸錯誤,同時直接丟棄接受到的錯誤數(shù)據(jù),否則轉(zhuǎn)發(fā)數(shù)據(jù)給接收者; 軟件工作模式圖 軟件設(shè)計原理 協(xié)議工作編程原理(1) 創(chuàng)建CSocket對象,創(chuàng)建兩個CSocket對象,分別為服務(wù)器端和客戶端的對象,如圖:CSocket ServerSocket。CSocket ClientSocket。(2)使用CSocket對象的Create()函數(shù)來創(chuàng)建Windows Socket。同時,Create()函數(shù)會自行調(diào)用Bind()函數(shù)將此Scoket綁定到指定的地址上面。例如:(5000)。 //服務(wù)器端需要指定一個端口號()。 //客戶端不用指定端口號(3)對于服務(wù)器端,需要這個Socket不停地監(jiān)聽是否有來自于網(wǎng)絡(luò)上的鏈接請求,因此需要調(diào)用監(jiān)聽函數(shù)。例如:()。(4)對于客戶端,實行連接,例如:(CString Address,Unsinged int Port)。//Address服務(wù)器的地址,Port是端口號(5)服務(wù)器接受鏈接。在服務(wù)器端用Accept接收倆字客戶端的消息。而此時服務(wù)器端還需建立一個新的CSocket兌現(xiàn),用來和客戶端進(jìn)行交流。例如:CSocket Receive;(Receive)。(6)客戶端發(fā)送消息,例如:( string ,buf )。(7)服務(wù)器接收客戶端送來的消息:( string ,buf )。(8)服務(wù)器停止:()。Socket(),建立流式套接字,返回套接字句柄sListen。Bind(),關(guān)聯(lián)一本地地址到套接字sListen。Listen(),設(shè)置backlog值,進(jìn)入監(jiān)聽狀態(tài)。Socket(),建立流式套接字s。建立連接,accept函數(shù)返回,得到新的套接字,如sClient。Recv()/send(),在套接字sClient上收發(fā)數(shù)據(jù),直到完成交換。Closesocket(),關(guān)閉監(jiān)聽套接字sListen,服務(wù)結(jié)束。Closesocket(),關(guān)閉套接字s,結(jié)束TCP對話。Accept(),等待接受客戶連接請求。Closesocket(),關(guān)閉套接字sClient。Connect(),將套接字s與服務(wù)器連接。Recv()/send(),在套接字上收發(fā)數(shù)據(jù),直到完成交換。服務(wù)器方客戶方第六章 詳細(xì)設(shè)計第六章 詳細(xì)設(shè)計 協(xié)議設(shè)計(3) fun功能標(biāo)識定義為枚舉類型(enum),占4個byte,共32位。用它來聲明一組命名的常數(shù),當(dāng)一個變量有幾種可能的取值時,可以將它定義為枚舉類型,在win32機(jī)器上,枚舉類型所占字節(jié)數(shù)總是4byte,在上面代碼片段中sizeof(enum)。sizeof(FUN),sizeof(LOGIN)都是4byte。(4) Fun分別包括LOGIN,LOGOUT,LOGOK,LOGERR,SHAKE,TRANSMIT,SVRSTOP,ERRL。lLOGIN表示用戶登錄,LOGOUT表示用戶退出,LOGOK表示用戶登陸成功,LOGERR表示用戶登陸失敗,SHAKE表示震動,TRANSNIT表示信息傳輸,SRRSTOP表示服務(wù)器停止,ERR表示數(shù)據(jù)傳送出錯。(2) senderID定義為char類型,是發(fā)送者的標(biāo)識,用以標(biāo)記信息的來源ID;(3) RecerverID定義為char類型,是接收者的標(biāo)識,用以標(biāo)記信息的目的ID;(4) Connect定義為char類型,是要傳輸?shù)臄?shù)據(jù);(5) Len定義為int類型,記錄了傳輸數(shù)據(jù)的長度,用于在服務(wù)器端進(jìn)行簡單校驗,如果出錯,則提醒發(fā)送者傳輸錯誤,同時直接丟棄接受到的錯誤數(shù)據(jù),否則轉(zhuǎn)發(fā)數(shù)據(jù)給接收者; 協(xié)議設(shè)計代碼皮片段typedef enum {LOGIN,LOGOUT,LOGOK,LOGERR,SHAKE,TRANSMIT,SVRSTOP,ERR} FUN。西安工程大學(xué)學(xué)士學(xué)位論文typedef struct NET_PACK{ FUN fun。 char senderID[28]。 char RecerverID[28]。 char Connect[1024]。 int Len。}NET_PACK。 協(xié)議工作方式設(shè)計,作為一個類NET_PACK添加到服務(wù)器端和客戶機(jī)端類的設(shè)計中,這里有兩種方案:(1),與客戶端,服務(wù)器端的文件存放在同一路經(jīng)下,分別添加到服務(wù)器端和客戶端的類中,由服務(wù)器和客戶共享一個文件;(2),屬性都相同。 可靠性控制 本次協(xié)議設(shè)計中??煽啃圆捎煤唵蔚膫鬏敂?shù)據(jù)長度檢驗,客戶端把長度作為數(shù)據(jù)包里一個字段Len傳送給服務(wù)器,服務(wù)器接收到數(shù)據(jù)包后,取出傳輸數(shù)據(jù)數(shù)(Connect)其長度并與數(shù)據(jù)包里的Len值作比對,相同則傳送給接收者,否則直接丟棄數(shù)據(jù)包并對發(fā)送者提醒傳送錯誤。相關(guān)代碼如下:(1)客戶端傳送長度 =lstrlen(strContent)。(2)服務(wù)器檢驗if(pPacklen1!=pPacklen2) { DealErr(pPack)。 }(3)服務(wù)器錯誤處理void CDlgTCPSeverDlg::DealErr(NET_PACK *pPack){ listCClientSocket*::iterator itor。 for (itor = CClientSocket::()。 itor != CClientSocket::()。itor++) { CClientSocket *pSocket = *itor。 if (!pSocketGetUID().Compare(pPacksenderID)) { NET_PACK pack。 memset(amp。pack,0,sizeof(NET_PACK))。 = ERR。 lstrcpy(,_T(傳送出錯!))。 pSocketSend(amp。pack,sizeof(NET_PACK))。 } }}(4) 客戶端收到服務(wù)器成傳送的傳輸錯誤提醒void CDlgTCPClientDlg::DealError(const char *Connect){ AfxMessageBox(Connect)。} 服務(wù)器端工程設(shè)計【File】|【New】菜單項,在新建對話框中選擇MFCAppWizard[exe]選項,輸入工程名“DlgTCPSever”。如圖建立基于對話框的應(yīng)用程序。在【MFC AppWizardStep 1】對話框中,選擇【Diaog based】單選按鈕,如圖:為工程添加WinSock支持。在上圖中單擊【Next】按鈕后進(jìn)入【MFC AppWizardstep2 of 4】對話框,在其中選擇復(fù)選框【W(wǎng)indows Sockets】后單擊【finish】按鈕完成向?qū)В鐖D:設(shè)計服務(wù)器對話框界面。在新建的工程中打開工作臺中的【resource View】選項,單擊【dialog】選項,打開對話框編輯器,拖動控件,設(shè)計對話框界面,如圖:添加前:設(shè)置控件屬性完成后:添加消息處理代碼。在MFC ClassWizard 工具劇中為上圖中的控件添加消息處理事件,在其中輸入代碼。 服務(wù)器窗口相關(guān)代碼(1)對話框初始化:void CDlgTCPSeverDlg::IniCtruls(){ // (LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_FLATSB)。 (0,_T(序號),LVCFMT_LEFT,80)。 (1,_T(用戶名),LVCFMT_LEFT,120)。 (2,_T(時間),LVCFMT_LEFT,120)。 (3,_T(事件),LVCFMT_LEFT,150)。(FALSE)。 CString strTitle。 (_T(服務(wù)器未開啟))。 SetWindowText(strTitle)。}(2)“登陸”控件代碼設(shè)計:void CDlgTCPSeverDlg::OnBtnStart() { // TODO: Add your control notification handler code here // UpdateData(TRUE)。 if (!(m_nPort,SOCK_STREAM,m_strIP)) { AfxMessageBox(_T(CSocket創(chuàng)建失??!))。 return。 } if (!()) { AfxMessageBox(_T(CSocket監(jiān)聽失??!))。 ()。 return。 } // CString strTitle。 (_T(服務(wù)器已開啟當(dāng)前在線人數(shù)(0)))。 SetWindowText(strTitle)。 (FALSE)。 (TRUE)。 InSertLog(_T(服務(wù)器),_T(登錄))。}(3)“停止”控件代碼設(shè)計:vovoid CDlgTCPSeverDlg::OnBtnStop() {// TODO: Add your control notification handler code here CString strTitle。 MessageBox(退出程序)。 (_T(服務(wù)器未開啟))。SetWindowText(strTitle)。(TRUE)。(FALSE)。Cle
點擊復(fù)制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1