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

正文內(nèi)容

基于tcpip、udp的局域網(wǎng)聊天工具-資料下載頁

2024-11-17 21:45本頁面

【導(dǎo)讀】集體已經(jīng)發(fā)表或撰寫過的作品成果。對本文的研究做出重要貢獻(xiàn)的個(gè)。人和集體均已在文中以明確方式標(biāo)明。本人完全意識(shí)到本聲明的法律。結(jié)果由本人承擔(dān)。任意用戶可對局域網(wǎng)其他用戶發(fā)送廣播文本通知;監(jiān)聽,等待其他用戶的連接請求,系統(tǒng)需要判斷連接的有效性。連接,那么本次通信就會(huì)結(jié)束。域網(wǎng)內(nèi)的所有用戶。[1]譚浩強(qiáng).C程序設(shè)計(jì)(第四版)[M].清華大學(xué)出版社,~147.[2]AndrewS·Tanenbaum著.潘愛民譯.計(jì)算機(jī)網(wǎng)絡(luò)(第4版)(中文版)[M].清華大學(xué)出。[3]李凌著.Winsock2網(wǎng)絡(luò)編程實(shí)用教程[M].清華大學(xué)出版社,~68.編程與調(diào)試,從而完成最后的測試。便,而且還會(huì)存在性能,安全性等許多方面的問題,并且還容易泄漏一些個(gè)人隱私。程序,并進(jìn)行了測試。完成期限:2020年5月上旬完成論文。進(jìn)行學(xué)習(xí)交流,并在硬件上驗(yàn)證設(shè)計(jì)的效果,保障畢業(yè)設(shè)計(jì)的順利完成。

  

【正文】 連接的設(shè)計(jì)要比比無連接的要多一些步驟,一般是要先進(jìn)行連接,然后再有后續(xù)的工作。可以通過圖 26 來表示, 如下。 圖 26 面向連接應(yīng)用程序示意圖 【 3】 其主要工作流程為 : 服務(wù)器方首先創(chuàng)建一個(gè) socket,再調(diào)用綁定函數(shù)將該 socket 和本地網(wǎng)絡(luò)地址綁定,然后調(diào)用監(jiān)聽函數(shù)對 socket 進(jìn)行偵聽同時(shí)也規(guī)定其處理大小,之后就調(diào)用接收函數(shù)來接收連接。 9 客戶端在建立套接口后就可調(diào)用連接函數(shù)和申請和服務(wù)器建立連接。在服務(wù)器接收申請后建立連接,然后客戶機(jī)和服務(wù)器之間就可以發(fā)送和接收數(shù)據(jù) .最后,待數(shù)據(jù)傳送結(jié)束后,關(guān)閉 socket。 基本套接字 [11] 創(chuàng)建套接字 —— socket() 功能:使用前創(chuàng)建一個(gè)新的套接字 格式 : SOCKET PASCAL FAR socket(int fd,int type,int procotol)。 參數(shù): fd: 通信發(fā)生的區(qū)域 type: 要建立的套接字類型 procotol: 使用的特定協(xié)議 指定本地地址 —— bind() 功能:將套接字地址與所創(chuàng)建的套接字號(hào)聯(lián)系起來。 格式: int PASCAL FAR bind(SOCKET s,const struct sockaddr FAR * name,int namelen)。 參數(shù): s: 是由 socket()調(diào)用返回的并且未作連 接的套接字描述符(套接字號(hào))。 其它:沒有錯(cuò)誤, bind()返回 0,否則 SOCKET_ERROR 地址結(jié)構(gòu)說明: struct sockaddr_in{ short sin_family。//AF_INET u_short sin_port。//16 位端口號(hào),網(wǎng)絡(luò)字節(jié)順序 struct in_addr sin_addr。//32 位 IP 地址,網(wǎng)絡(luò)字節(jié)順序 char sin_zero[8]。//保留 }。 建立套接字連接 —— connect()和 accept() 功能:共同完成連接工作 格式: int PASCAL FAR connect(SOCKET s,const struct sockaddr FAR * name,int namelen)。 SOCKET PASCAL FAR accept(SOCKET s,struct sockaddr FAR * name,int FAR * addrlen)。 參數(shù):同上。 監(jiān)聽連接 —— listen() 功能:用于面向連接服務(wù)器,表明它愿意接收連接。 10 格式 : int PASCAL FAR listen(SOCKET s, int backlog)。 數(shù)據(jù)傳輸 —— send()與 recv() 功能:數(shù)據(jù)的發(fā)送與接收 格式: int PASCAL FAR send(SOCKET s,const char FAR * buf,int len,int flags)。 int PASCAL FAR recv(SOCKET s,const char FAR * buf,int len,int flags)。 參數(shù): buf:指向存有傳輸數(shù)據(jù)的緩沖區(qū)的指針。 多路復(fù)用 —— select() 功能:用來檢測一個(gè)或多個(gè)套接字狀態(tài)。 格式: int PASCAL FAR select(int nfds,fd_set FAR * readfds,fd_set FAR * writefds, fd_set FAR * exceptfds,const struct timeval FAR * timeout)。 參數(shù): readfds:指向要做讀檢測的指針 ; writefds:指向要做寫檢測的指針 ; exceptfds:指向要檢測是否出錯(cuò)的指針; timeout:最大等待時(shí)間。 關(guān)閉套接字 —— closesocket() 功能:關(guān)閉套接字 s ; 格式: BOOL PASCAL FAR closesocket(SOCKET s)。 客戶端 /服務(wù)器模式( C/S) [9] 在 TCP/IP 網(wǎng)絡(luò)中兩個(gè)進(jìn)程間的相互作用的主機(jī)模式是客戶機(jī) /服務(wù)器模式(Client/Server model)。該模式的建立基于以下兩點(diǎn): 非對等作用; 通信完全是異步的??蛻魴C(jī) /服務(wù)器模式在操作過程中采取的是主動(dòng)請示方式: 首先服務(wù)器 (Server)方要先啟動(dòng),并根據(jù)請示提供相應(yīng)服務(wù),過程如下所示: 打開一 通信通道并告知本地主機(jī),它愿意在某一個(gè)公認(rèn)地址上接收客戶請求。 等待客戶請求到達(dá)該端口。 接收到重復(fù)服務(wù)請求,處理該請求并發(fā)送應(yīng)答信號(hào)。 返回第二步,等待另一客戶請求 關(guān)閉服務(wù)器。 然后打開客戶端 (Client): 打開一通信通道,并連接到服務(wù)器所在主機(jī)的特定端口。 向服務(wù)器發(fā)送服務(wù)請求報(bào)文,等待并接收應(yīng)答;繼續(xù)提出請求?? 請求結(jié)束后關(guān)閉通信通道并終止。 11 3 系統(tǒng)需求分析和概要設(shè)計(jì) 系統(tǒng)需求分析 據(jù)需求確定本系統(tǒng)的要具備一下的功能: 在局域網(wǎng)內(nèi)不同用戶之間可以實(shí)時(shí)文本通信; 用戶可以上傳和下載文件; 任意用戶可對局域網(wǎng)其他用戶發(fā)送廣播文本通知; 任意用戶可以查看當(dāng)前在線用戶。 首先,在程序啟動(dòng)時(shí)需要進(jìn)行一個(gè)初始化,包括界面和開啟本機(jī)的一個(gè)Server 監(jiān)聽,等待其他用戶的連接請求,系統(tǒng)需要判斷連接的有效性。 其次,在實(shí)時(shí)文本通信過程中需要一個(gè)連接的檢測操作,如果任何一端斷開了連接,那么本次通信就會(huì)結(jié)束。 第三,在文件傳輸過程中必須的保證文件的完整。 第四,發(fā)送廣播和連接是相互獨(dú)立的,發(fā)送廣播不需要先進(jìn)行連接,廣播對象是局域網(wǎng)內(nèi)的所有用戶。 第五,用戶在 上線后可以選擇先查看當(dāng)前在線用戶,然后再進(jìn)行其它操作 。 系統(tǒng)整體框架 系統(tǒng)整體模塊圖 統(tǒng)采用模塊化設(shè)計(jì)思想。系統(tǒng)的總體模塊分布圖如圖 31 所示 圖 31 系統(tǒng)整體模塊圖 各模塊簡述 1)部署模塊:主要是在程序啟動(dòng)時(shí)進(jìn)行相應(yīng)的準(zhǔn)備,啟動(dòng) Server 監(jiān)聽,黑名單和廣播功能,如下圖所示。 12 圖 32 部署模塊功能 2)Server 模塊:主要提供了以下功能,如圖 33 所示,其中建立和 Client 的連接是在接收連接請求后,可以隨時(shí)斷開連接。 圖 33 Server 模塊功能 3)Client 模塊:主要提 供了以下功能,如圖 34 所示。其中建立和 Server 的連接是在 Server 接收連接請求以后,可以隨時(shí)斷開連接。 圖 34 Client 模塊功能 系統(tǒng)開發(fā)環(huán)境 本系統(tǒng)采用 Linux 作為系統(tǒng)開發(fā)平臺(tái)。 開發(fā)語言及開發(fā)環(huán)境:采用 Linux C 語言,開發(fā)工具為 Vi 編輯器。 硬件環(huán)境: Ubuntu 虛擬機(jī)。 13 4 系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)效果 聊天系統(tǒng)的設(shè)計(jì) 部署模塊 部署模塊詳述 部署模塊的主要工作是在程序啟動(dòng)時(shí)對系統(tǒng)進(jìn)行一個(gè)初始化,首先是要啟動(dòng) Server 監(jiān)聽,在某個(gè)指定的端口等待 Client 發(fā)送過來的連 接請求,部署模塊還具備黑名單功能,能添加和刪除 IP 地址到黑名單中。還能對局域網(wǎng)內(nèi)所有用戶發(fā)送廣播。 廣播流程 部署模塊提供了廣播功能,流程如下圖所示: 圖 41 廣播流程圖 主要代碼 static struct sockaddr_in tcp_self。 =AF_INET。 =htons(38438)。 //服務(wù)端的 tcp 公共端口和 ip 地址 =i_addr()。 14 /*** 根據(jù)發(fā)過來的消息的 dst_name 在用戶鏈表中找到相對應(yīng)的用戶 ***/ struct sockaddr_in serach_peer(struct message msg,user_node *my_user_list){ user_node *tmp。 list_for_each_entry(tmp,amp。(my_user_listuser_list),user_list) if(0 == strcmp(tmp,)) { return tmp。 } struct sockaddr_in no_use。 memset(amp。no_use,0,sizeof(no_use))。 return no_use。 //表示沒有找到。 } Server 模塊 Server 模塊詳述 Server 模塊的主要功能是在接收了 Client 端的連接請求以后創(chuàng)建一個(gè) Socket連接,用于雙方的通信。在連接之前必須先進(jìn)行一個(gè)黑名單判定,如果請求連接的 IP 地址在黑名單中,則不接收此 連接請求。 建立 Server 流程 如下圖,在接收了連接請求以后會(huì)建立一個(gè) Server。 圖 42 建立 Server流程圖 15 信息處理流程 圖 43 信息處理流程 主要代碼 while(1) //對不同的信息進(jìn)行處理 { lable: list_for_each_entry(tmp,amp。(my_msg_listmsg_list),msg_list) { switch (tmp) { case MSG_TYPE_ONLINE: //查詢在線用戶 { user_node *tmp_node。 list_for_each_entry(tmp_node,amp。(my_user_listuser_list),user_list) { 16 if(strcmp(tmp,tmp_node) == 0) { tmp=MSG_TYPE_USER_EXIST。 debug(用戶已存在 \n)。 sendto(srv_fd,amp。(tmpmsg),sizeof(tmpmsg),0,(struct sockaddr *)amp。(tmp),sizeof(tmp))。 goto lable。 } } strcpy(,tmp)。 =tmp。 =tmp。 add_user_to_list(my_user_list,tmp_user)。 system(clear)。 printf(******user_info***************\n)。 show_user(my_user_list)。 list_for_each_entry(tmp_node,amp。(my_user_listuser_list),user_list) { if(strcmp(tmp,tmp_node) == 0) continue。 sendto(srv_fd,amp。(tmpmsg),sizeof(tmpmsg),0,(struct sockaddr *)amp。(tmp_node),sizeof(tmp_node))。 } del_msg_from_list(my_msg_list,tmpmsg )。 17 goto lable。 } case MSG_TYPE_UNLINE: //用戶不在線 { del_user_from_list(my_user_list,tmp)。 system(clear)。 printf(******user_info***************\n)。 show_user(my_user_list)。 user_node *tmp_node。 list_for_each_entry(tmp_node,amp。(my_user_listuser_list),user_list) sendto(srv_fd,amp。(tmpmsg),sizeof(tmpmsg),0,(struct sockaddr *)amp。(tmp_node),sizeof(tmp_node))。 del_msg_from_list(my_msg_list,tmpmsg )。 goto lable。 } case MSG_TYPE_ONLINE_USER_
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1