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

正文內(nèi)容

畢業(yè)設(shè)計(jì)-基于linux下網(wǎng)絡(luò)聊天室的設(shè)計(jì)與實(shí)現(xiàn)-文庫(kù)吧資料

2024-12-09 02:13本頁(yè)面
  

【正文】 include include USER_LIST head=NULL。 (3)在一臺(tái)計(jì)算機(jī)的終端先運(yùn)行服務(wù)器程序 (./multithread_tcp_server p 8080),再在客戶(hù)端的計(jì)算機(jī)終端上運(yùn)行客戶(hù)端程序 ()就會(huì)看到結(jié)果 ;運(yùn)行結(jié)果如 下所示。 17 (2)配置服務(wù)器和客戶(hù)端的 IP,保證網(wǎng)絡(luò)暢通,在 serv. c中已將服務(wù)器的 IP 設(shè)置為: 192. 168. 。運(yùn)用交叉編譯工具 armlinuxgcc,執(zhí)行編譯指令生成可執(zhí)行文件。 ( 4) 關(guān)閉客戶(hù)端 socket。 2 發(fā)送請(qǐng)求 (1) 獲取主機(jī)信息 (2) 初始化 socket 端口 (3)利用 connect 函數(shù)講自己的 IP 地址等信息發(fā)送到主機(jī),等待主機(jī)接受信息。 (3) 使用 bind 函數(shù)綁定端口及其 IP地址。 Sock_fd = socket( AF_INET, SOCK_STREAM, 0) , AF_INET 為 IPV4協(xié)議, SOCK_STREAM 為使用 socket 的 流 模式 。這導(dǎo)致它的 TCP 也發(fā)送一個(gè) FIN N;接收到這個(gè) FIN 的源發(fā)送端 TCP 對(duì)它進(jìn)行確認(rèn)?,F(xiàn)在我們介紹 socket 中的四次握手釋放連接的過(guò)程,請(qǐng)看下圖: 圖示過(guò)程為:某個(gè)應(yīng)用進(jìn)程首先調(diào)用 close 主動(dòng)關(guān)閉連接,這時(shí) TCP 發(fā)送一個(gè)FIN M;另一端接收到 FIN M 之后,執(zhí)行被動(dòng)關(guān)閉,對(duì)這個(gè) FIN 進(jìn)行確認(rèn)。 圖 客戶(hù)向服務(wù)器監(jiān)聽(tīng)端口發(fā)連接 圖 服務(wù)器 accept()后與客戶(hù)建立連接 socket 中 TCP 的三次握手建立連接詳解 我們知道 tcp 建立連接要進(jìn)行“三次握手”,即交換三個(gè)分組。 在這里須注意,服務(wù)器 并不是通過(guò)監(jiān)聽(tīng)端口來(lái)與客戶(hù)連接并通信,而是產(chǎn)生一個(gè)新的套接口與客戶(hù)通信。 參數(shù)說(shuō)明: sockfd 是被監(jiān)聽(tīng)的 socket 描述符, addr 通常是一個(gè)指向sockaddr_in 變量的指針,該變量用來(lái)存放提出請(qǐng)求服務(wù)的主機(jī)的信息(某臺(tái)主機(jī)從某個(gè)端口發(fā)出該請(qǐng)求); addrlen 通常為一個(gè)指向值為 sizeof(struct sockaddr_in)的整型指針變量。 原型: int accept(int sockfd, void *addr,int *addrlen )。 功能: socket 與某一端口捆綁以后,就需要監(jiān)聽(tīng)該端口,以便到達(dá)的服務(wù)請(qǐng)求加以處理。 參數(shù)說(shuō)明: sockfd 是本地的 sockfd 描述符; serv_addr 是包含目的主機(jī)IP地址和端口號(hào)的指針。 listen()和 accept()函數(shù) 原型: int connect( int sockfd,struct sockaddr *serv_addr,int addrlen)。 功能:關(guān)閉套接字,執(zhí)行 close()之后,套接字將不再允許進(jìn)行讀操作和寫(xiě)操作。 參數(shù)說(shuō)明: sockfd 是一個(gè) socket 描述符, my_addr 是一個(gè)指向包含有本機(jī)IP 地址及端口號(hào)等信息的 sockaddr 類(lèi)型(通用套接口地址類(lèi)型)的指針;addrlen 常被設(shè)置為 sizeof(struct sockaddr).另外,可以用下面的賦值實(shí)現(xiàn)自動(dòng)獲得本機(jī) IP地址和隨即機(jī)獲取一個(gè)沒(méi)有被占用的端口號(hào): = 0。protocol 通常賦值 “0” 。 參數(shù)說(shuō)明: domain 參數(shù)指定 socket 的域名,為 AF_INET 或 AF_UNIX。 (注: i_addr()返回的地方已經(jīng)是網(wǎng)絡(luò)字節(jié)順序了 ) 也可以把一個(gè) struct in_addr 代表的 IP地址打印出來(lái)(按照 數(shù)字 .數(shù)字 .數(shù)字 .數(shù)字的格式)如 printf(“%s”,i_ntoa() )。 假設(shè)有一個(gè) struct sockaddr_in ina,并且 IP 是 ,想把它存儲(chǔ)到 ina,可以使用 i_addr()。 ntohl() —— “Network to Host Long” 網(wǎng)絡(luò)字節(jié)順序轉(zhuǎn)換為主機(jī)字節(jié)順序(對(duì)無(wú)符號(hào)長(zhǎng)型進(jìn)行操作 8 bytes)。 htonl() —— “Host to Network Long” 主機(jī)字節(jié)順序轉(zhuǎn)換網(wǎng)絡(luò)字節(jié)順序(對(duì)無(wú)符號(hào)短型進(jìn)行操作 8 bytes)。所以對(duì)與內(nèi)部字節(jié)表示順序和網(wǎng)絡(luò)字節(jié)順序不同的機(jī)器,一定要對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)換(比如 IP 地址的表示,端口號(hào)的表示)。 }。 sin_family通常被賦值 AF_INET。 /* 添 0(和 struct sockaddr 一樣大小 */ 應(yīng)用層 傳輸層 網(wǎng)絡(luò)層 通信子網(wǎng)層 , tel, ftp,? Dns, rip, snmp TCP TCP , FDDI, PPP,?? IP 端口 SAP SAP ARP ,RARP ICMP ,IGMP 11 }。 /* 端口號(hào) */ struct in_addr sin_addr。 IPV4 套接口地址結(jié)構(gòu) struct sockaddr_in 的定義如下: struct sockaddr_in{ short int sin_family。 sa_family 一般為 AF_INET。 /* 地址族, AF_XXX */ char sa_data[14]。 Linux 支持多種套接 口地址結(jié)構(gòu),在這兒只介紹一下 IPV4 套接口地址結(jié)構(gòu)和通用套接口地址結(jié)構(gòu)。 套接字和端口號(hào)是最容易混淆的兩個(gè)概念,套接字不是人為指定的,而是由 Socket()的返回返回值決定的。 10 TCP/IP 協(xié)議模型及各層所用協(xié)議 套接字和套接口地址結(jié)構(gòu) 套接字是套接口描述字的簡(jiǎn)稱(chēng),是整型數(shù)字,它于文件描述符共用一段數(shù)值空間 0~ 65535。流式是一種面向連接的 Socket,針對(duì)于面向連接的 TCP 服務(wù)應(yīng)用;數(shù)據(jù)報(bào)式Socket 是一種無(wú)連接的 Socket,對(duì)應(yīng)于無(wú)連接的 UDP 服務(wù)應(yīng)用;原始套接口是針對(duì)網(wǎng)絡(luò)層編程用的套接口,例如 ping 命令的編寫(xiě)要用到原始套接口,因?yàn)閜ing 的底層協(xié)議是 ICMP,而 ICMP 屬于網(wǎng)絡(luò)層。網(wǎng)絡(luò)應(yīng)用程序之間通過(guò)套接口來(lái)實(shí)現(xiàn)通信。 端口:標(biāo)識(shí)傳輸層與應(yīng)用程序的數(shù)據(jù)接口(服務(wù)訪(fǎng)問(wèn)點(diǎn) SAP),每個(gè)端口有一個(gè) 16位的標(biāo)識(shí)符,稱(chēng)為端口號(hào) 。為了保護(hù)變量,我們必須使用信號(hào)量、互斥等方法來(lái)保證我們對(duì)變量的正確使用。因?yàn)槿绻祷氐氖呛瘮?shù)內(nèi)部靜態(tài)聲明的空間的地址,則在一個(gè)線(xiàn)程調(diào)用該函數(shù)得到地址后使用該地址指向的數(shù)據(jù)時(shí),別的線(xiàn)程可能調(diào)用此函數(shù)并修改了這一段數(shù)據(jù)。許多函數(shù)是不可重入的,即同時(shí)不能運(yùn)行一個(gè)函數(shù)的多個(gè)拷貝(除非使用不同的數(shù)據(jù)段)。但這也給多線(xiàn)程編程帶來(lái)了許多問(wèn)題。 實(shí)現(xiàn) 線(xiàn)程創(chuàng)建 pthread_create() 所需頭文件 include 函數(shù)原型 int pthread_create ((pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg)) thread:線(xiàn)程標(biāo)識(shí)符 attr:線(xiàn)程屬性設(shè)置 start_routine:線(xiàn)程函數(shù)的起始地址 arg:傳遞給 start_routine 的參數(shù) 函數(shù)返回值 成功: 0 出錯(cuò): 1 線(xiàn)程退出 pthread_exit()。因此,大大減少了上下文切換的開(kāi)銷(xiāo)。 8 第 四 章 關(guān)鍵技術(shù)分析 linux 線(xiàn)程 間通信 線(xiàn)程是一個(gè)進(jìn)程內(nèi)的基本調(diào)度單位,也可以稱(chēng)為輕量級(jí)進(jìn)程。 gdb 支持很多與 UNIX shell 程序一樣的命令編輯特征。 make 使你能不退出 gdb 就可以重新產(chǎn)生可執(zhí)行文件。 watch 使你能監(jiān)視一個(gè)變量的值而不管它何時(shí)被改變。 run 執(zhí)行當(dāng)前被調(diào)試的程序。 next 執(zhí)行一行源代碼但不進(jìn)入函數(shù)內(nèi)部。 kill 終止正在調(diào)試的程序。 這些命令從簡(jiǎn)單的文件裝入到允許你檢查所調(diào)用的堆棧內(nèi)容的復(fù)雜命令 gdb 調(diào)試時(shí)會(huì)用到的一些命令。在編譯時(shí)用 g 選項(xiàng)打開(kāi)調(diào)試選項(xiàng)。 調(diào)試信息包含你程序里的每個(gè)變量的類(lèi)型和在可執(zhí)行文件里的地址映射以及源代碼的行號(hào)。也就是 Makefile 中最核心的內(nèi)容。說(shuō) 白一點(diǎn)就是說(shuō), prerequisites中如果有一個(gè)以上的文件比 target 文件要新的話(huà), mand 所定義的命令就會(huì)被執(zhí)行。 mand 也就是 make 需要執(zhí)行的命令。 7 Makefile 規(guī)則 target ... : prerequisites ... mand ... ... target 也就是一個(gè)目標(biāo)文件,可以是 Object File,也可以是執(zhí)行文件。 make是一個(gè)命令工具,是一個(gè)解釋 makefile中指令的命令工 具,一般來(lái)說(shuō),大多數(shù)的 IDE 都有這個(gè)命令,比如: Delphi 的 make, Visual C++的 nmake, Linux 下 GNU 的 make。一個(gè)工程中的源文件不計(jì)數(shù),其按類(lèi)型、功能、模塊分別放在若干個(gè) 目錄中, makefile 定義了一系列的規(guī)則來(lái)指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進(jìn)行更復(fù)雜的功能操作,因?yàn)? makefile 就像一個(gè) Shell 腳本一樣,其中也可以執(zhí)行操作系統(tǒng)的命令。對(duì)于 A類(lèi),預(yù)處理程序 cpp 在系統(tǒng)預(yù)設(shè)包含文件目錄 (如 /usr/include)中搜尋相應(yīng)的文件,而B(niǎo)類(lèi),預(yù)處理程序在目標(biāo)文件的文件夾內(nèi)搜索相應(yīng)文件。 Idirname,將 dirname 所指出的目錄加入到程序頭文件目錄列表中,是在預(yù)編譯過(guò)程中使用的參數(shù)。 O,對(duì)程序進(jìn)行優(yōu)化編譯、連接,采用這 個(gè)選項(xiàng),整個(gè)源代碼會(huì)在編譯、連接過(guò)程中進(jìn)行優(yōu)化處理,這樣產(chǎn)生的可執(zhí)行文件的執(zhí)行效率可以提高,但是,編譯、連接的速度就相應(yīng)地要慢一些。如果不給出這個(gè)選項(xiàng), gcc 就給出預(yù)設(shè)的可執(zhí)行文件 。 c,只編譯,不連接成為可執(zhí)行文件,編譯器只是由輸入的 .c 等源代碼文件生成 .o 為后綴的目標(biāo)文件,通常用于編譯不包含主程序的子程序文件。GCC編譯器的調(diào)用參數(shù)大約有 100多個(gè),其中多數(shù)參數(shù)我們可能根本就用不到,這里只介紹其中最基本、最常用的參數(shù)。在連接階段,所有的目標(biāo)文件被安排在可執(zhí)行程序中的恰當(dāng)?shù)奈恢?,同時(shí),該程序所調(diào)用到的庫(kù)函數(shù)也從各自所在的檔案庫(kù)中連到合適的地方。匯編過(guò)程是針對(duì)匯編語(yǔ)言的步驟,調(diào)用 as 進(jìn)行工作,一般來(lái)講, .S 為后綴的匯編語(yǔ)言源代碼文件和匯編、 .s 為后綴的匯編語(yǔ)言文件經(jīng)過(guò)預(yù)編譯和匯編之后都生成以 .o 為后綴的目標(biāo)文件。 命令 gcc 首先調(diào)用 cpp 進(jìn)行預(yù)處理,在預(yù)處理過(guò)程中, 對(duì)源代碼文件中的文件包含 (include)、預(yù)編譯語(yǔ)句 (如 宏 定義 define 等 )進(jìn)行分析。之后也變得可處理 Fortran、 Pascal、 ObjectiveC、Java, 以及 Ada 與其他語(yǔ)言。 GCC 原名為 GNU C 語(yǔ)言編譯器,因?yàn)樗局荒芴幚? C語(yǔ)言。當(dāng)客戶(hù)一鏈接客戶(hù)服務(wù)端時(shí),就給客戶(hù)一個(gè)賬號(hào),也就是相當(dāng)于注冊(cè)信息,同時(shí)并 發(fā)服務(wù)器一直在為連接用戶(hù)創(chuàng)建線(xiàn)程,系統(tǒng)的總設(shè)計(jì)框圖如下: 5 第 三 章 linux 網(wǎng)絡(luò)聊天室工具 概述 GCC GCC 簡(jiǎn)介 GCC( GNU Compiler Collection, GNU編譯器 套裝),是一套由 GNU 開(kāi)發(fā)的編程語(yǔ)言編譯器??蛻?hù)狀態(tài)分為鏈接客戶(hù)和非連接客戶(hù),我采用結(jié)構(gòu)體存儲(chǔ)鏈接客戶(hù)信息,以鏈表來(lái)記錄鏈接客戶(hù)。再有,在客戶(hù)的聊天信息時(shí),也要記錄下客戶(hù)的聊天記錄,已備查看聊天記錄所用。 服務(wù)器主要是處理客戶(hù)輸入信息。 服務(wù)器端:負(fù)責(zé)處理用戶(hù)發(fā)來(lái)的各種信息,管理用戶(hù)的動(dòng)作(注冊(cè)、登陸、一對(duì)一私聊、查看在線(xiàn)人數(shù))和管理用戶(hù)的信息。 第二章 linux 網(wǎng)絡(luò)聊天室 設(shè)計(jì)思想 功能分析 本系統(tǒng)是想在 linux 系統(tǒng)下實(shí)現(xiàn)一個(gè)聊天室系統(tǒng),只要有服務(wù)器和客戶(hù)端。它是一組計(jì)算機(jī)通信協(xié)議族具有開(kāi)放式互聯(lián)環(huán)境很容易實(shí)現(xiàn)各種局域網(wǎng)和廣域網(wǎng)的集成式互聯(lián)。 目前計(jì)算機(jī)網(wǎng)絡(luò)持續(xù)而高速地發(fā)展 ,其中基于 TCP/ IP 協(xié)議網(wǎng)絡(luò)已經(jīng)成為計(jì)算機(jī)之間組網(wǎng)的常見(jiàn)形式 . 基于 TCP/ IP 的網(wǎng)絡(luò)編程 ,也得到了廣泛的應(yīng) 4 用。一個(gè)套接字描述一個(gè)通訊連接的一端。再有,且其內(nèi)核小、效率高、兼容性好和穩(wěn)定性強(qiáng)等優(yōu)點(diǎn)。首先, Linux 系統(tǒng)擁有許多網(wǎng)絡(luò)編程的庫(kù)函數(shù),可以方便地實(shí)現(xiàn)客戶(hù)機(jī) / 服務(wù)器模型。 單就網(wǎng)絡(luò)編程來(lái)說(shuō), linux 和 windows 其實(shí)都差不多,只是基于不同的開(kāi)發(fā)平臺(tái),并且 linux的 API基本上是自己用 C寫(xiě)的,而 windows底層有封裝, 只要熟悉 linux網(wǎng)絡(luò)編程,如果以后轉(zhuǎn) windows 相對(duì)容易。 the socke 目錄 摘要 ...................................................................................
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1