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

正文內(nèi)容

畢業(yè)設(shè)計-基于linux下網(wǎng)絡(luò)聊天室的設(shè)計與實現(xiàn)-預(yù)覽頁

2025-01-02 02:13 上一頁面

下一頁面
 

【正文】 說,此設(shè)計以嵌入式 C 語言為開發(fā)語言,使用網(wǎng)絡(luò)套接字 socket 建立連接, 并運行多線程實現(xiàn)數(shù)據(jù)交換,程序經(jīng) GCC 調(diào)試成功,可以在單機網(wǎng)絡(luò)中使用。 網(wǎng)絡(luò)編程可以做如下工作:網(wǎng)絡(luò)安全,通訊設(shè)備研發(fā),協(xié)議分析 , 網(wǎng)絡(luò)管理系統(tǒng) 等 。其次 Linux 秉承了 UNIX 的設(shè)備無關(guān)性這一優(yōu)秀特征,即它通過文件的描述符實現(xiàn)了統(tǒng)一的設(shè)備接口,網(wǎng)絡(luò)的 Socket 數(shù)據(jù)傳輸是一種特殊的 I/ 0 Scoket 也是一種文件描述符。套接字可以被看做一 個專門的管道,但又不像管道,套接字對它們能容納的數(shù)量沒有限制,且 Linux 支持多種類型的套接字。socket 通訊所采用的協(xié)議分為面向連接和面向非連接兩種,由于 UDP盡最大努力但提供不可靠的服務(wù) UDP 算法可以 在本地網(wǎng)絡(luò)條件好的環(huán)境中良好工作,但在環(huán)境較復(fù)雜的網(wǎng)絡(luò)中就不能正常工作了,必須通過超時和重傳來實現(xiàn)可靠性,而 TCP 則提供了數(shù)據(jù)傳輸?shù)耐耆煽啃裕虼诉x擇 TCP 通信協(xié)議更可靠些。 客戶端:主要用于查看在線人數(shù)、發(fā)送信息給特定用戶等功能, 總體設(shè)計 本聊天室系統(tǒng)采用了 c/s 形式。當(dāng)然,服務(wù)器還有自己的動態(tài)數(shù)據(jù)處理。它是一套以 GPL 及 LGPL 許可證所發(fā)行的自由軟件,也是 GNU 計劃的關(guān)鍵部分,亦是自由的類 Unix 及蘋果電腦 Mac OS X 操作系統(tǒng) 的標(biāo)準(zhǔn)編譯器。 GCC 執(zhí)行過程 雖然我們稱 Gcc 是 C 語言的編譯器,但使用 gcc 由 C 語言源代碼文件生成可執(zhí)行文件 的過程不僅僅是編譯的過程,而是要經(jīng)歷四個相互關(guān)聯(lián)的步驟 ∶ 預(yù)處理 (也稱 預(yù)編譯 , Preprocessing)、 編譯 (Compilation)、 匯編 (Assembly)和鏈接 (Linking)。當(dāng)所有的目標(biāo)文件都生成之后, gcc 就調(diào)用 ld來完成最后 的關(guān)鍵性工作,這個階段就是連接。 GCC 最基本的用法是 ∶gcc [options] [filenames] 6 其中 options 就是編譯器所需要的參數(shù), filenames 給出相關(guān)的文件名稱。 g,產(chǎn)生符號調(diào)試工具 (GNU 的 gdb)所必要的符號資訊,要想對源代碼進行調(diào)試,我們就必須加入這個選項。 C程序中的頭文件包含兩種情況 ∶ A)include B)include “” 其中, A 類使用尖括號 ( ), B 類使用雙引號 (“ ”) 。 makefile帶來的好處就是 —— “自動化編譯”,一旦 寫好,只需要一個 make 命令,整個工程完全自動編譯,極大的提高了軟件開發(fā)的效率。 prerequisites 就是,要生成那個 target 所需要的文件或是目標(biāo)。這就是 Makefile 的規(guī)則。 gdb 利用這些信息使源代碼和機器碼相關(guān)聯(lián)。如 file 裝入想要調(diào)試的可執(zhí)行文件。 step 執(zhí)行一行源代碼而且進入函數(shù)內(nèi)部。 break 在代碼里設(shè)置斷點 , 這將使程序執(zhí)行到這里時被掛起。你能象在 bash 或 tcsh 里那樣按 Tab 鍵讓 gdb 幫你補齊一個唯一的命令 , 如果不唯一的話 gdb 會列出所有匹配的命令你也能用光標(biāo)鍵上下翻動歷史命令。一個進程可以有多個線程,也就 是有多個線程控制表及堆棧寄存器,但卻共享一個用戶地址空間。我們必須當(dāng)心有多個不同的進程訪問相同的變量。在進程中共享的變量必須用關(guān)鍵字 volatile 來定義,這是為了防止編譯器在優(yōu)化時(如 gcc 中使用 OX參數(shù))改變它們的使用方式。 套接口: IP 地址與端口號的組合,用來標(biāo)識全網(wǎng)范圍內(nèi)的唯一一個端口,在 TCP 協(xié)議中用來標(biāo)識一個連接。 TCP/IP 協(xié)議模型及 各層所用協(xié)議 如圖所示。一般來說,該套接字(文件描述符號)是系統(tǒng)當(dāng)前可用的,并且是數(shù)值最小的整型描述符;端口號是客戶應(yīng)用程序中一般不認為指定, 而在服務(wù)器應(yīng)用程序中必須指定,以為服務(wù)器應(yīng)用程序要在某個固定端口上監(jiān)聽。 /* 14 字節(jié)的協(xié)議地址 */ }。 /* 地址族 */ unsigned short int sin_port。 指向 sockaddr_in 的指針和指向 sockaddr 的指針可以相互轉(zhuǎn)換,這意味著如果一個函數(shù)所需參數(shù)類型是 sockaddr 時,你可以在函數(shù)調(diào)用的時候?qū)⒁粋€指向 sockaddr_in 的指針轉(zhuǎn)換為指向 sickaddr 的指針;或者相反。 如果你聲明了一個 ina 作為一個 struct sockaddr_in 的結(jié) 構(gòu),那么 就是 4個字節(jié)的 IP 地址(按網(wǎng)絡(luò)字節(jié)順序排放) 基本轉(zhuǎn)換函數(shù) 網(wǎng)絡(luò)字節(jié)順序 因為每一個機器內(nèi)部對變量的字節(jié)存儲順序不同(有的系統(tǒng)是高位在前,地位在后,而有的系統(tǒng)是低位在前,高位在后),而網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)是一定要統(tǒng)一順序的。 ntohs() —— “Network to Host Short” 網(wǎng)絡(luò)字節(jié)順序轉(zhuǎn)換為主機字節(jié)順序(對無符號短型進行操作 4 bytes)。 12 = i_addr(“”)。 type指定套接口的類型,為 SOCK_STREAM、 SOCK_DGRAM 或 SOCK_RAW。 /*系統(tǒng)隨機選 擇一個未被使用的端口號 */ = INADDR_ANY; /*填入本機 IP 地方 */ 原型: close(sockfd)。 功能:用來與遠端服務(wù)器建立一個 TCP 連接。 參數(shù)說明: sockfd 是 socket()系統(tǒng)調(diào)用返回的 socket 描述符; backlog 13 指定在請求隊列中允許的最大請求數(shù),進入的連接請求將在隊列中等待被accept()。 返回值:整型套接口描述符。大致流程如下: 客戶端向服務(wù)器發(fā)送一個 SYN J 服務(wù)器向客戶端響應(yīng)一個 SYN K,并對 SYN J 進行確認 ACK J+1 客戶端再想服務(wù)器發(fā)一個確認 ACK K+1 只有就完了三次握手,但是這個三次握手發(fā)生在 socket 的那幾個函數(shù)中呢? 如 圖: Listenfd Client client Listenfd connfd 14 、 socket 中 TCP 的四次握手釋放連接詳解 上面介紹了 socket 中 TCP 的三次握手建立過程,及其涉及的 socket 函數(shù)。這樣每個方向上都有一個 FIN 和 ACK 15 第五 章 linux 下 socket 編程實現(xiàn)過程 聊天室 socket 編譯鏈接過程 1 監(jiān)聽鏈接 利用 socket, bind, listen 建立鏈接,步驟是: (1) 先利用 socket 函數(shù)處事話 socket 端口,獲得 sock_fd(一種文件描述符)。 (4) 利用 listen 函數(shù)監(jiān)聽。 4 詳細流程圖 : 16 具體操作 (1)在 Linux 的 VI 編輯器下編寫服務(wù)器端程序 serv. c 和客戶端程序 。在客戶端的 “ 網(wǎng)絡(luò)設(shè)置 ” 中設(shè)置 IP 為 服務(wù)器相同網(wǎng)段 ,可以通過 ping 命令檢測網(wǎng)絡(luò)是否暢通。 void *start_routine(void *arg)//thread function { fd_set readfds。 19 int ret = 1。 = 1。 FD_SET(0, amp。 ret = select(maxfd + 1, amp。 } else { USER_LIST delet=delete_pointer(find_user(head,newfd), head)。 err_sys(server select) } }//if (ret == 1) else if (ret == 0) { //fprintf(stderr, server time out\n)。\039。 err_sys(server recv) } else if (rc == 0) { USER_LIST delet=delete_pointer(find_user(head,newfd), head)。 FD_CLR(newfd, amp。 forward(head,buffer_r,newfd)。 } int main (int argc, char *argv[]) { int sockfd = 1。 } sockfd = socket(AF_INET, SOCK_STREAM, 0)。 struct sockaddr_in server_addr。//ipv4 = htonl(INADDR_ANY)。//shutdown(sockfd, SHUT_RD | SHUT_WR)。 pthread_t pt = 1。attr)。attr, PTHREAD_SCOPE_SYSTEM)。 if(head!=NULL) send_list( head)。client_addr, amp。 err_sys(server accept) } } else { printf(Create a new connection[%d] ==client ip[%s]|client port[%d]==\n, newfd, i_ntoa(), ntohs())。 } else { next_p=last_p(head)。 } num++。newfd)。 close(newfd)。 } }//while (RUNNING) accept close(sockfd)。 } 附錄 B: include include int main(int argc, char **argv) { int sockfd。 int rc, wc。}。 while ((c = getopt (argc, argv, p:i:)) != 1) switch (c) { case 39。 case 39。 default: break。server_addr, addr_size)。 // int count = 1。 exit(EXIT_FAILURE)。 struct timeval ts。 = 1。 FD_SET(STDIN_FILENO, amp。 ret = select(maxfd + 1, amp。 } else { close(sockfd)。 break。, BUFF_SIZE)。 err_sys(client send) } }//if (FD_ISSET(STDIN_FILENO, amp。, BUFF_SIZE)。 FD_CLR(sockfd, amp。 pri_rec(buffer_r)。 exit(EXIT_SUCCESS)。) { printf( 你的客戶端號 :%d\n,buf[1])。 while(*buf) { printf( %d ,*buf++)。amp。39。amp。buf[1]==39。 } else { printf(%s\n,buf++)。 if(head==NULL) err_sys(create malloc:) return head。 pointernext=NULL。 return 1。 return del_p。 del_p=headnext。 } int find_user(USER_LIST head,int newfd) { while(head!=NULLamp。 return headnumber。amp。 if(head==NULL) { wc = send(newfd, amp。 //send_list( head)。 if((buffer[0]39。(39。)39。 //send_list( head)。 USER_LIST pi=head。 buf[0]=39。 while(head!=NULL) { buf_c[0]=(unsigned char)headnumber。 strcat(buf,i_ntoa(headsin_addr))。 strcat(buf,buf_c)。 } return 0。在這半學(xué)期的學(xué)習(xí)新理論知識中 體 現(xiàn)了一個再學(xué)習(xí)的過程 ,記得在校時老師們就說過,現(xiàn)
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1