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

正文內(nèi)容

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

2024-12-25 02:13 上一頁面

下一頁面
 

【正文】 檢查所調(diào)用的堆棧內(nèi)容的復雜命令 gdb 調(diào)試時會用到的一些命令。 next 執(zhí)行一行源代碼但不進入函數(shù)內(nèi)部。 watch 使你能監(jiān)視一個變量的值而不管它何時被改變。 gdb 支持很多與 UNIX shell 程序一樣的命令編輯特征。因此,大大減少了上下文切換的開銷。但這也給多線程編程帶來了許多問題。因為如果返回的是函數(shù)內(nèi)部靜態(tài)聲明的空間的地址,則在一個線程調(diào)用該函數(shù)得到地址后使用該地址指向的數(shù)據(jù)時,別的線程可能調(diào)用此函數(shù)并修改了這一段數(shù)據(jù)。 端口:標識傳輸層與應(yīng)用程序的數(shù)據(jù)接口(服務(wù)訪問點 SAP),每個端口有一個 16位的標識符,稱為端口號 。流式是一種面向連接的 Socket,針對于面向連接的 TCP 服務(wù)應(yīng)用;數(shù)據(jù)報式Socket 是一種無連接的 Socket,對應(yīng)于無連接的 UDP 服務(wù)應(yīng)用;原始套接口是針對網(wǎng)絡(luò)層編程用的套接口,例如 ping 命令的編寫要用到原始套接口,因為ping 的底層協(xié)議是 ICMP,而 ICMP 屬于網(wǎng)絡(luò)層。 套接字和端口號是最容易混淆的兩個概念,套接字不是人為指定的,而是由 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” 主機字節(jié)順序轉(zhuǎn)換網(wǎng)絡(luò)字節(jié)順序(對無符號短型進行操作 8 bytes)。 假設(shè)有一個 struct sockaddr_in ina,并且 IP 是 ,想把它存儲到 ina,可以使用 i_addr()。 參數(shù)說明: domain 參數(shù)指定 socket 的域名,為 AF_INET 或 AF_UNIX。 參數(shù)說明: sockfd 是一個 socket 描述符, my_addr 是一個指向包含有本機IP 地址及端口號等信息的 sockaddr 類型(通用套接口地址類型)的指針;addrlen 常被設(shè)置為 sizeof(struct sockaddr).另外,可以用下面的賦值實現(xiàn)自動獲得本機 IP地址和隨即機獲取一個沒有被占用的端口號: = 0。 listen()和 accept()函數(shù) 原型: int connect( int sockfd,struct sockaddr *serv_addr,int addrlen)。 功能: socket 與某一端口捆綁以后,就需要監(jiān)聽該端口,以便到達的服務(wù)請求加以處理。 參數(shù)說明: sockfd 是被監(jiān)聽的 socket 描述符, addr 通常是一個指向sockaddr_in 變量的指針,該變量用來存放提出請求服務(wù)的主機的信息(某臺主機從某個端口發(fā)出該請求); addrlen 通常為一個指向值為 sizeof(struct sockaddr_in)的整型指針變量。 圖 客戶向服務(wù)器監(jiān)聽端口發(fā)連接 圖 服務(wù)器 accept()后與客戶建立連接 socket 中 TCP 的三次握手建立連接詳解 我們知道 tcp 建立連接要進行“三次握手”,即交換三個分組。這導致它的 TCP 也發(fā)送一個 FIN N;接收到這個 FIN 的源發(fā)送端 TCP 對它進行確認。 (3) 使用 bind 函數(shù)綁定端口及其 IP地址。 ( 4) 關(guān)閉客戶端 socket。 17 (2)配置服務(wù)器和客戶端的 IP,保證網(wǎng)絡(luò)暢通,在 serv. c中已將服務(wù)器的 IP 設(shè)置為: 192. 168. 。 參考文獻: [1] :協(xié)議 TCP/IP IIIustrated Volume 1: The Protocols. [2] Steven, Bill Fenner, Andrew 卷 2. [3]Kurt Wall. GNU/linux編程指南 . [4]嚴蔚敏,吳偉明 .數(shù)據(jù)結(jié)構(gòu)( C 語言版) . [5]譚浩強 .C 語言程序設(shè)計 . [6]Kenh 和指針 . [7]Mendel shell 編程從入門到精通 . 附錄 該附錄主要顯示的時,該系統(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è)論文開題、調(diào)查、研究和撰寫過程中,岳淼老師給予我耐心、細致和全面的幫助 , 這個設(shè)計需要用到的理論很多 ,幾乎是我學習基于 到 Linux下 c 編程的知識的一個集合體 ,這同時也積累了我近幾個月的編程經(jīng)驗。 } 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( 在線客戶端號 IP地址 \n)。 } 附錄 C: include int pri_rec(char *buf) { int count。
點擊復制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1