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

正文內(nèi)容

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

2023-01-13 02:13:43 本頁面
  

【正文】 erv. c中已將服務(wù)器的 IP 設(shè)置為: 192. 168. 。在客戶端的 “ 網(wǎng)絡(luò)設(shè)置 ” 中設(shè)置 IP 為 服務(wù)器相同網(wǎng)段 ,可以通過 ping 命令檢測網(wǎng)絡(luò)是否暢通。 (3)在一臺計算機(jī)的終端先運(yùn)行服務(wù)器程序 (./multithread_tcp_server p 8080),再在客戶端的計算機(jī)終端上運(yùn)行客戶端程序 ()就會看到結(jié)果 ;運(yùn)行結(jié)果如 下所示。 服務(wù)器端: 等待鏈接界面: 鏈接成功界面: 客戶端: 客戶注冊成功界面: 通信過程: 用戶 1 和用戶 2 相互通信界面: (在此圖中同時顯示了在線用戶) 18 每登陸一個用戶,系統(tǒng)會自動注冊,保存在 中,通信時只需指定用戶,就可以實現(xiàn)多線程間通信。 參考文獻(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 語言版) . [5]譚浩強(qiáng) .C 語言程序設(shè)計 . [6]Kenh 和指針 . [7]Mendel shell 編程從入門到精通 . 附錄 該附錄主要顯示的時,該系統(tǒng)的源代碼 : 附錄 A: include include USER_LIST head=NULL。 void *start_routine(void *arg)//thread function { fd_set readfds。 struct timeval ts。 int newfd = *(int *)arg。 int maxfd = newfd。 19 int ret = 1。 char buffer_r[BUFF_SIZE]。 int rc = 1, wc = 1。 while (RUNNING) { select_label: maxfd = ((maxfd newfd) ? maxfd : newfd)。 = 1。 = 0。 FD_ZERO(amp。readfds)。 FD_SET(0, amp。readfds)。 FD_SET(newfd, amp。readfds)。 ret = select(maxfd + 1, amp。readfds, NULL, NULL, amp。ts)。 if (ret == 1) { if (errno == EINTR) { goto select_label。 } else { USER_LIST delet=delete_pointer(find_user(head,newfd), head)。 if(delet!=NULL) head=delet。 send_list( head)。 close(newfd)。 err_sys(server select) } }//if (ret == 1) else if (ret == 0) { //fprintf(stderr, server time out\n)。 continue。 } else { /**************Server read*****************/ if (FD_ISSET(newfd, amp。readfds)) { memset(buffer_r, 39。\039。, BUFF_SIZE)。 20 rc = recv(newfd, buffer_r, BUFF_SIZE, 0)。 if (rc == 1) { close(newfd)。 err_sys(server recv) } else if (rc == 0) { USER_LIST delet=delete_pointer(find_user(head,newfd), head)。 if(delet!=NULL) head=delet。 send_list(head)。 close(newfd)。 FD_CLR(newfd, amp。readfds)。 err_sys(client is shut down) } else { buffer_r[BUFF_SIZE 1] = 39。\039。 forward(head,buffer_r,newfd)。 } }//if (FD_ISSET(newfd, amp。readfds)) }//select return value 0 }//while (RUNNING) close(newfd)。 pthread_exit(NULL)。 } int main (int argc, char *argv[]) { int sockfd = 1。 socklen_t addrlen = addr_size。 if (argc != 3) { fprintf(stderr, Usage:%s p server_port\n, argv[0])。 exit(EXIT_FAILURE)。 } sockfd = socket(AF_INET, SOCK_STREAM, 0)。//closed 21 if (sockfd == 1) { err_sys(server socket) } int i = 1。 setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (void *)amp。i, sizeof(i))。 struct sockaddr_in server_addr。 bzero(amp。server_addr, addr_size)。 = AF_INET。//ipv4 = htonl(INADDR_ANY)。//INADDR_ANY = htons(atoi(argv[2]))。 if (bind(sockfd, (struct sockaddr *)amp。server_addr, addrlen) == 1) { close(sockfd)。//shutdown(sockfd, SHUT_RD | SHUT_WR)。 err_sys(server bind) } if (listen(sockfd, BACK_LOG) == 1)//closedlisten { shutdown(sockfd, SHUT_RD | SHUT_WR)。 err_sys(server listen) } int newfd = 1。 struct sockaddr_in client_addr。 pthread_t pt = 1。 pthread_attr_t attr。 int ret = 1。 pthread_attr_init(amp。attr)。 pthread_attr_setdetachstate(amp。attr, PTHREAD_CREATE_DETACHED)。 pthread_attr_setscope(amp。attr, PTHREAD_SCOPE_SYSTEM)。 int num=1。 USER_LIST next_p=NULL。 while (RUNNING) { printf(\nParent process[%d] whose master thread is %u is waiting for a new connection...\n, getpid(), pthread_self())。 if(head!=NULL) send_list( head)。 22 bzero(amp。client_addr, addr_size)。 newfd = accept(sockfd, (struct sockaddr *)amp。client_addr, amp。addrlen)。 if (newfd == 1) { if (errno == EINTR) { continue。 } else { close(sockfd)。 err_sys(server accept) } } else { printf(Create a new connection[%d] ==client ip[%s]|client port[%d]==\n, newfd, i_ntoa(), ntohs())。 } if(head==NULL) { next_p=creat_pointer()。 head=next_p。 write_list(next_p,num,newfd,)。 } else { next_p=last_p(head)。 next_pnext=creat_pointer()。 next_p=next_pnext。 write_list(next_p,num,newfd,)。 } num++。 /***************Create a new slave thread**********************/ ret = pthread_create(amp。pt, amp。attr, start_routine, (void *)amp。newfd)。 if (ret != 0) { USER_LIST delet=delete_pointer(find_user(head,newfd), head)。 if(delet!=NULL) head=delet。 send_list( head)。 close(newfd)。 fprintf(stderr, Master thread[%u] created a new thread failurefully\n, 23 pthread_self())。 continue。 } else { fprintf(stdout, Master thread[%u] which belongs to process[%d] creates a new slave thread[%u], pthread_self(), getpid(), pt)。 } }//while (RUNNING) accept close(sockfd)。 pthread_attr_destroy(amp。attr)。 exit(EXIT_SUCCESS)。 } 附錄 B: include include int main(int argc, char **argv) { int sockfd。 struct sockaddr_in server_addr。 socklen_t addrlen = addr_size。 char buffer_r[BUFF_SIZE], buffer_w[BUFF_SIZE]。 int rc, wc。 int server_port。 char server_ip[16] = {39。\039。}。 if(argc != 5) { fprintf(stderr, Usage:%s p server_port i server_ip\n, argv[0])。 exit(EXIT_FAILURE)。 } int c = 1。 while ((c = getopt (argc, argv, p:i:)) != 1) switch (c) { case 39。p39。: 24 server_port = atoi(optarg)。 break。 case 39。i39。: strncpy(server_ip, optarg, 15)。 break。 default
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1