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

正文內(nèi)容

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

 

【正文】 檢查所調(diào)用的堆棧內(nèi)容的復(fù)雜命令 gdb 調(diào)試時(shí)會(huì)用到的一些命令。 next 執(zhí)行一行源代碼但不進(jìn)入函數(shù)內(nèi)部。 watch 使你能監(jiān)視一個(gè)變量的值而不管它何時(shí)被改變。 gdb 支持很多與 UNIX shell 程序一樣的命令編輯特征。因此,大大減少了上下文切換的開(kāi)銷。但這也給多線程編程帶來(lái)了許多問(wèn)題。因?yàn)槿绻祷氐氖呛瘮?shù)內(nèi)部靜態(tài)聲明的空間的地址,則在一個(gè)線程調(diào)用該函數(shù)得到地址后使用該地址指向的數(shù)據(jù)時(shí),別的線程可能調(diào)用此函數(shù)并修改了這一段數(shù)據(jù)。 端口:標(biāo)識(shí)傳輸層與應(yīng)用程序的數(shù)據(jù)接口(服務(wù)訪問(wèn)點(diǎn) SAP),每個(gè)端口有一個(gè) 16位的標(biāo)識(shí)符,稱為端口號(hào) 。流式是一種面向連接的 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 命令的編寫要用到原始套接口,因?yàn)閜ing 的底層協(xié)議是 ICMP,而 ICMP 屬于網(wǎng)絡(luò)層。 套接字和端口號(hào)是最容易混淆的兩個(gè)概念,套接字不是人為指定的,而是由 Socket()的返回返回值決定的。 /* 地址族, AF_XXX */ char sa_data[14]。 IPV4 套接口地址結(jié)構(gòu) struct sockaddr_in 的定義如下: struct sockaddr_in{ short int sin_family。 /* 添 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 }。 }。 htonl() —— “Host to Network Long” 主機(jī)字節(jié)順序轉(zhuǎn)換網(wǎng)絡(luò)字節(jié)順序(對(duì)無(wú)符號(hào)短型進(jìn)行操作 8 bytes)。 假設(shè)有一個(gè) struct sockaddr_in ina,并且 IP 是 ,想把它存儲(chǔ)到 ina,可以使用 i_addr()。 參數(shù)說(shuō)明: domain 參數(shù)指定 socket 的域名,為 AF_INET 或 AF_UNIX。 參數(shù)說(shuō)明: 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è)沒(méi)有被占用的端口號(hào): = 0。 listen()和 accept()函數(shù) 原型: int connect( int sockfd,struct sockaddr *serv_addr,int addrlen)。 功能: socket 與某一端口捆綁以后,就需要監(jiān)聽(tīng)該端口,以便到達(dá)的服務(wù)請(qǐng)求加以處理。 參數(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)的整型指針變量。 圖 客戶向服務(wù)器監(jiān)聽(tīng)端口發(fā)連接 圖 服務(wù)器 accept()后與客戶建立連接 socket 中 TCP 的三次握手建立連接詳解 我們知道 tcp 建立連接要進(jìn)行“三次握手”,即交換三個(gè)分組。這導(dǎo)致它的 TCP 也發(fā)送一個(gè) FIN N;接收到這個(gè) FIN 的源發(fā)送端 TCP 對(duì)它進(jìn)行確認(rèn)。 (3) 使用 bind 函數(shù)綁定端口及其 IP地址。 ( 4) 關(guān)閉客戶端 socket。 17 (2)配置服務(wù)器和客戶端的 IP,保證網(wǎng)絡(luò)暢通,在 serv. c中已將服務(wù)器的 IP 設(shè)置為: 192. 168. 。 參考文獻(xiàn): [1] :協(xié)議 TCP/IP IIIustrated Volume 1: The Protocols. [2] Steven, Bill Fenner, Andrew 卷 2. [3]Kurt Wall. GNU/linux編程指南 . [4]嚴(yán)蔚敏,吳偉明 .數(shù)據(jù)結(jié)構(gòu)( C 語(yǔ)言版) . [5]譚浩強(qiáng) .C 語(yǔ)言程序設(shè)計(jì) . [6]Kenh 和指針 . [7]Mendel shell 編程從入門到精通 . 附錄 該附錄主要顯示的時(shí),該系統(tǒng)的源代碼 : 附錄 A: include include USER_LIST head=NULL。 int maxfd = newfd。 while (RUNNING) { select_label: maxfd = ((maxfd newfd) ? maxfd : newfd)。readfds)。readfds)。 if (ret == 1) { if (errno == EINTR) { goto select_label。 close(newfd)。readfds)) { memset(buffer_r, 39。 if (rc == 1) { close(newfd)。 close(newfd)。\039。 pthread_exit(NULL)。 exit(EXIT_FAILURE)。i, sizeof(i))。 = AF_INET。server_addr, addrlen) == 1) { close(sockfd)。 struct sockaddr_in client_addr。 pthread_attr_init(amp。 pthread_attr_setscope(amp。 while (RUNNING) { printf(\nParent process[%d] whose master thread is %u is waiting for a new connection...\n, getpid(), pthread_self())。 newfd = accept(sockfd, (struct sockaddr *)amp。 } else { close(sockfd)。 write_list(next_p,num,newfd,)。 write_list(next_p,num,newfd,)。attr, start_routine, (void *)amp。 send_list( head)。 } else { fprintf(stdout, Master thread[%u] which belongs to process[%d] creates a new slave thread[%u], pthread_self(), getpid(), pt)。 exit(EXIT_SUCCESS)。 char buffer_r[BUFF_SIZE], buffer_w[BUFF_SIZE]。\039。 } int c = 1。 break。 break。 bzero(amp。 = i_addr(server_ip)。 fprintf(stderr, Client is trying to connect...\n)。 } } fd_set readfds。 while(RUNNING) { select_label: 25 maxfd = ((maxfd sockfd) ? maxfd : sockfd)。readfds)。readfds)。 switch(ret) { case 1://select error if (errno == EINTR) { goto select_label。 case 0://select time out //fprintf(stderr, server time out\n)。\039。 if (wc == 1) { close(sockfd)。\039。 err_sys(client recv) } else if(rc == 0) { close(sockfd)。\039。 }//switch(ret) }//while(RUNNING) shutdown(sockfd, SHUT_RD | SHUT_WR)。39。 buf++。amp。 if(*buf==39。 } else if(buf[0]==39。amp。) { printf(客戶端不存在 \n)。 head=(USER_LIST)malloc(user_size)。 pointersin_addr=sin_add。 if(num==0) { printf(free err\n)。 head=NULL。headnextnumber!=num) head=headnext。 return NULL。 if(head==NULL) return 0。 while(head!=NULLamp。)) head=headnext。 if (wc == 1) 29 { //delete_pointer(find_user(head,newfd), head)。039。 buffer[1]=39。 buf[0]=39。 if (wc == 1) { //delete_pointer(find_user(head,newfd), head)。 } int send_list(USER_LIST head) { int wc。 char buf_c[2]={0}。39。 30 } */ strcat(buf,buf_c)。39。 if (wc == 1) err_sys(server send xx) pi=pinext。 } 致謝 在我畢業(yè)論文開(kāi)題、調(diào)查、研究和撰寫過(guò)程中,岳淼老師給予我耐心、細(xì)致和全面的幫助 , 這個(gè)設(shè)計(jì)需要用到的理論很多 ,幾乎是我學(xué)習(xí)基于 到 Linux下 c 編程的知識(shí)的一個(gè)集合體 ,這同時(shí)也積累了我近幾個(gè)月的編程經(jīng)驗(yàn)。 } USER_LIST last_p(USER_LIST head) { while(headnext!=NULL) head=headnext。 } while(pi!=NULL) { buf[1]=(char)pinumber。 head=headnext。 /*p_addr=i_ntoa(headsin_addr)。39。 char count=0。 close(newfd)。 strcat(buffer,buf )。 strcat(buffer, i_ntoa(headsin_addr))。039。 close(newfd)。amp。headnumber!=(buf[0]39。 } int forward(USER_LIST head,char *buf,int newfd) { int wc。amp。 headnext=del_pnext。 } while(headnext!=NULLamp。 } if(headnumber==num) { if(headnext!=NULL) del_p=headnext。 28 return 0。 } int write_list(USER_LIST pointer,int num,int sockfd,struct in_addr sin_add) { pointernumber=num。 } return 0。amp。39。) buf++。*buf!=0) { printf(%c,*buf++)。 while(*buf!=39。 printf( 在線客戶端號(hào) IP地址 \n)。 } 附錄 C: include int pri_rec(char *buf) { int count。
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1