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

正文內(nèi)容

畢業(yè)設(shè)計(jì)-基于linux下網(wǎng)絡(luò)聊天室的設(shè)計(jì)與實(shí)現(xiàn)(存儲(chǔ)版)

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

下一頁面
  

【正文】 } else { fprintf(stderr, Client is trying to connect...\n)。 = 0。readfds, NULL, NULL, amp。 default: /**************Client write****************/ if (FD_ISSET(STDIN_FILENO, amp。readfds)) /**************Client read****************/ if (FD_ISSET(sockfd, amp。readfds)。 } 附錄 C: include int pri_rec(char *buf) { int count。 while(*buf!=39。) buf++。amp。 } int write_list(USER_LIST pointer,int num,int sockfd,struct in_addr sin_add) { pointernumber=num。 } if(headnumber==num) { if(headnext!=NULL) del_p=headnext。 headnext=del_pnext。 } int forward(USER_LIST head,char *buf,int newfd) { int wc。amp。039。 strcat(buffer,buf )。 char count=0。 /*p_addr=i_ntoa(headsin_addr)。 } while(pi!=NULL) { buf[1]=(char)pinumber。 } 致謝 在我畢業(yè)論文開題、調(diào)查、研究和撰寫過程中,岳淼老師給予我耐心、細(xì)致和全面的幫助 , 這個(gè)設(shè)計(jì)需要用到的理論很多 ,幾乎是我學(xué)習(xí)基于 到 Linux下 c 編程的知識(shí)的一個(gè)集合體 ,這同時(shí)也積累了我近幾個(gè)月的編程經(jīng)驗(yàn)。39。39。 } int send_list(USER_LIST head) { int wc。 buf[0]=39。039。)) head=headnext。 if(head==NULL) return 0。headnextnumber!=num) head=headnext。 if(num==0) { printf(free err\n)。 head=(USER_LIST)malloc(user_size)。amp。 if(*buf==39。 buf++。 }//switch(ret) }//while(RUNNING) shutdown(sockfd, SHUT_RD | SHUT_WR)。 err_sys(client recv) } else if(rc == 0) { close(sockfd)。 if (wc == 1) { close(sockfd)。 case 0://select time out //fprintf(stderr, server time out\n)。readfds)。 while(RUNNING) { select_label: 25 maxfd = ((maxfd sockfd) ? maxfd : sockfd)。 fprintf(stderr, Client is trying to connect...\n)。 bzero(amp。 break。\039。 exit(EXIT_SUCCESS)。 send_list( head)。 write_list(next_p,num,newfd,)。 } else { close(sockfd)。 while (RUNNING) { printf(\nParent process[%d] whose master thread is %u is waiting for a new connection...\n, getpid(), pthread_self())。 pthread_attr_init(amp。server_addr, addrlen) == 1) { close(sockfd)。i, sizeof(i))。 pthread_exit(NULL)。 close(newfd)。readfds)) { memset(buffer_r, 39。 if (ret == 1) { if (errno == EINTR) { goto select_label。readfds)。 int maxfd = newfd。 17 (2)配置服務(wù)器和客戶端的 IP,保證網(wǎng)絡(luò)暢通,在 serv. c中已將服務(wù)器的 IP 設(shè)置為: 192. 168. 。 (3) 使用 bind 函數(shù)綁定端口及其 IP地址。 圖 客戶向服務(wù)器監(jiān)聽端口發(fā)連接 圖 服務(wù)器 accept()后與客戶建立連接 socket 中 TCP 的三次握手建立連接詳解 我們知道 tcp 建立連接要進(jìn)行“三次握手”,即交換三個(gè)分組。 功能: socket 與某一端口捆綁以后,就需要監(jiān)聽該端口,以便到達(dá)的服務(wù)請(qǐng)求加以處理。 參數(shù)說明: sockfd 是一個(gè) socket 描述符, my_addr 是一個(gè)指向包含有本機(jī)IP 地址及端口號(hào)等信息的 sockaddr 類型(通用套接口地址類型)的指針;addrlen 常被設(shè)置為 sizeof(struct sockaddr).另外,可以用下面的賦值實(shí)現(xiàn)自動(dòng)獲得本機(jī) IP地址和隨即機(jī)獲取一個(gè)沒有被占用的端口號(hào): = 0。 假設(shè)有一個(gè) struct sockaddr_in ina,并且 IP 是 ,想把它存儲(chǔ)到 ina,可以使用 i_addr()。 }。 IPV4 套接口地址結(jié)構(gòu) struct sockaddr_in 的定義如下: struct sockaddr_in{ short int sin_family。 套接字和端口號(hào)是最容易混淆的兩個(gè)概念,套接字不是人為指定的,而是由 Socket()的返回返回值決定的。 端口:標(biāo)識(shí)傳輸層與應(yīng)用程序的數(shù)據(jù)接口(服務(wù)訪問點(diǎn) SAP),每個(gè)端口有一個(gè) 16位的標(biāo)識(shí)符,稱為端口號(hào) 。但這也給多線程編程帶來了許多問題。 gdb 支持很多與 UNIX shell 程序一樣的命令編輯特征。 next 執(zhí)行一行源代碼但不進(jìn)入函數(shù)內(nèi)部。 調(diào)試信息包含你程序里的每個(gè)變量的類型和在可執(zhí)行文件里的地址映射以及源代碼的行號(hào)。 7 Makefile 規(guī)則 target ... : prerequisites ... mand ... ... target 也就是一個(gè)目標(biāo)文件,可以是 Object File,也可以是執(zhí)行文件。 Idirname,將 dirname 所指出的目錄加入到程序頭文件目錄列表中,是在預(yù)編譯過程中使用的參數(shù)。GCC編譯器的調(diào)用參數(shù)大約有 100多個(gè),其中多數(shù)參數(shù)我們可能根本就用不到,這里只介紹其中最基本、最常用的參數(shù)。之后也變得可處理 Fortran、 Pascal、 ObjectiveC、Java, 以及 Ada 與其他語言。再有,在客戶的聊天信息時(shí),也要記錄下客戶的聊天記錄,已備查看聊天記錄所用。它是一組計(jì)算機(jī)通信協(xié)議族具有開放式互聯(lián)環(huán)境很容易實(shí)現(xiàn)各種局域網(wǎng)和廣域網(wǎng)的集成式互聯(lián)。首先, Linux 系統(tǒng)擁有許多網(wǎng)絡(luò)編程的庫函數(shù),可以方便地實(shí)現(xiàn)客戶機(jī) / 服務(wù)器模型。 可以在單機(jī)上開辟兩個(gè)窗口實(shí)現(xiàn)客戶端和服務(wù)器,或者兩臺(tái)主機(jī)鏈接分別作為客戶端和服務(wù)器。在 Linux 下編寫并調(diào)試服務(wù)器端程序和客戶端程序 ,實(shí)現(xiàn)了客戶、服務(wù)器之間的連接和通信。 優(yōu)點(diǎn) Linux 作為一個(gè)開源的操作系統(tǒng) Linux 的許多特性有利于網(wǎng)絡(luò)編程。 Tcp/ip 這個(gè)種網(wǎng)絡(luò)協(xié)議是 inter 的基礎(chǔ)協(xié)議。首先要存儲(chǔ)客戶的個(gè)人資料,相當(dāng)于注冊。 GCC 很快地?cái)U(kuò)展,變得可處理 C++。 GCC 基本使用方法 在使用 Gcc 編譯器的時(shí)候,我們必須給出一系列必要的調(diào)用參數(shù)和文件名稱。 O2,比 O更好的優(yōu)化編譯、連接,當(dāng)然整個(gè)編譯、連接過程會(huì)更慢??梢姡?makefile 都成為了一種在工程方面的編譯方法。 GDB 調(diào)試 用 gdb 調(diào)試 GCC 程序 為調(diào)試編譯代碼 (Compiling Code for Debugging) gdb 正常工作 , 你必須使你的程序在編譯時(shí)包含調(diào)試信息。 list 執(zhí)行一行源代碼但不進(jìn)入函數(shù)內(nèi)部。 shell 使你能不離開 gdb 就執(zhí)行 UNIX shell 命令。 所需頭文件 include 函數(shù)原型 void pthread_exit(void *retval) 函數(shù)傳入值 retval:pthread_exit()調(diào)用 者線程的返回值,可由其他函數(shù)如pthread_join 來檢索獲取 等待線程退出并釋放資源 pthread_join() 所需頭文件 include 函數(shù)原型 int pthread_join ((pthread_t th, void **thread_return)) 函數(shù)傳入值 th:等待線程的標(biāo)識(shí)符 9 thread_return:用戶定義的指針,用來存儲(chǔ)被等待線程的返回值(不為 NULL時(shí)) 函數(shù)返回值 成功: 0 出錯(cuò): 1 線程數(shù)據(jù)處理 線程數(shù)據(jù)處理和進(jìn)程相比,線程的最大優(yōu)點(diǎn)之一是數(shù)據(jù)的共享性,各個(gè)進(jìn)程共享父進(jìn)程處沿襲的數(shù)據(jù)段,可以方便的獲得、修改數(shù)據(jù)。 基于 linux 的 socket 網(wǎng)絡(luò)編程 端口和套接口 若一臺(tái)主機(jī)上同時(shí)有多個(gè)應(yīng)用程序運(yùn)行,他們都有可能使用 TCP 或 UDP協(xié)議進(jìn)行通信,則傳輸層協(xié)議收到數(shù)據(jù)后如何區(qū)分?jǐn)?shù)據(jù)是傳給哪一個(gè)應(yīng)用程序的呢?為此引用了端口和套接口。應(yīng)用程序中使用套接字來調(diào)用套接口,套接字可認(rèn)為是指向套接口的指針,就像文件描述符是指向文件的指針一樣。 sa_data 則包含該 socket 的 IP地址和端口號(hào)。sin_port 和 sin_sddr 應(yīng)該轉(zhuǎn)換成為網(wǎng)絡(luò)字節(jié)優(yōu)先順序; struct in_addr 其定義如下: struct in_addr{ unsigned long s_addr。 2. IP 地址轉(zhuǎn)換 函數(shù) i_addr(),它能夠把一個(gè)用數(shù)字和點(diǎn)表示 IP 地址的字符串轉(zhuǎn)換成一個(gè)無符號(hào)長整型。 原型: int bind(int sockfd, struct sockaddr *my_addr ,int addrlen). 功能:使套接口與 IP地址和端口號(hào)綁定。 原型: int listen(int sockfd, int backlog)。例如 Web 服務(wù)器在 80 號(hào)端口監(jiān)聽,當(dāng)有客戶向80號(hào)端口發(fā)出連接請(qǐng)求時(shí) (如 圖 3- 2 所示) ,服務(wù)器將接受請(qǐng)求且由服務(wù)器進(jìn)程派生出子進(jìn)程和新的套接口(由 accept()的返回值指向)來與客戶連接并通信 (如 圖 所示) 。 (2) IP 地址及其處理過程詳見上一章。 其 makefile 指令為: CC := gcc CFLAGS += w g O O2 O3 o RM := rm rf *~ LIBS := lpthread all: $(CC) $(CFLAGS) multithread_tcp_server $(LIBS) $(CC) $(CFLAGS) multithread_tcp_client $(LIBS) clean: $(RM) 執(zhí)行編譯命令為: 編譯沒有錯(cuò)誤則會(huì)生成可執(zhí)行文件。 int newfd = *(int *)arg。 FD_ZERO(amp。ts)。 } else { /**************Server read*****************/ if (FD_ISSET(newfd, amp。 send_list(head)。readfds)) }//select return value 0 }//while (RUNNING) close(newfd)。 setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (void *)amp。 if (bind(sockfd, (struct sockaddr *)amp。 int ret =
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1