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

正文內(nèi)容

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

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

【正文】 LIBS := lpthread all: $(CC) $(CFLAGS) multithread_tcp_server $(LIBS) $(CC) $(CFLAGS) multithread_tcp_client $(LIBS) clean: $(RM) 執(zhí)行編譯命令為: 編譯沒(méi)有錯(cuò)誤則會(huì)生成可執(zhí)行文件。在客戶端的 “ 網(wǎng)絡(luò)設(shè)置 ” 中設(shè)置 IP 為 服務(wù)器相同網(wǎng)段 ,可以通過(guò) ping 命令檢測(cè)網(wǎng)絡(luò)是否暢通。 服務(wù)器端: 等待鏈接界面: 鏈接成功界面: 客戶端: 客戶注冊(cè)成功界面: 通信過(guò)程: 用戶 1 和用戶 2 相互通信界面: (在此圖中同時(shí)顯示了在線用戶) 18 每登陸一個(gè)用戶,系統(tǒng)會(huì)自動(dòng)注冊(cè),保存在 中,通信時(shí)只需指定用戶,就可以實(shí)現(xiàn)多線程間通信。 void *start_routine(void *arg)//thread function { fd_set readfds。 int newfd = *(int *)arg。 19 int ret = 1。 int rc = 1, wc = 1。 = 1。 FD_ZERO(amp。 FD_SET(0, amp。 FD_SET(newfd, amp。 ret = select(maxfd + 1, amp。ts)。 } else { USER_LIST delet=delete_pointer(find_user(head,newfd), head)。 send_list( head)。 err_sys(server select) } }//if (ret == 1) else if (ret == 0) { //fprintf(stderr, server time out\n)。 } else { /**************Server read*****************/ if (FD_ISSET(newfd, amp。\039。 20 rc = recv(newfd, buffer_r, BUFF_SIZE, 0)。 err_sys(server recv) } else if (rc == 0) { USER_LIST delet=delete_pointer(find_user(head,newfd), head)。 send_list(head)。 FD_CLR(newfd, amp。 err_sys(client is shut down) } else { buffer_r[BUFF_SIZE 1] = 39。 forward(head,buffer_r,newfd)。readfds)) }//select return value 0 }//while (RUNNING) close(newfd)。 } int main (int argc, char *argv[]) { int sockfd = 1。 if (argc != 3) { fprintf(stderr, Usage:%s p server_port\n, argv[0])。 } sockfd = socket(AF_INET, SOCK_STREAM, 0)。 setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (void *)amp。 struct sockaddr_in server_addr。server_addr, addr_size)。//ipv4 = htonl(INADDR_ANY)。 if (bind(sockfd, (struct sockaddr *)amp。//shutdown(sockfd, SHUT_RD | SHUT_WR)。 err_sys(server listen) } int newfd = 1。 pthread_t pt = 1。 int ret = 1。attr)。attr, PTHREAD_CREATE_DETACHED)。attr, PTHREAD_SCOPE_SYSTEM)。 USER_LIST next_p=NULL。 if(head!=NULL) send_list( head)。client_addr, addr_size)。client_addr, amp。 if (newfd == 1) { if (errno == EINTR) { continue。 err_sys(server accept) } } else { printf(Create a new connection[%d] ==client ip[%s]|client port[%d]==\n, newfd, i_ntoa(), ntohs())。 head=next_p。 } else { next_p=last_p(head)。 next_p=next_pnext。 } num++。pt, amp。newfd)。 if(delet!=NULL) head=delet。 close(newfd)。 continue。 } }//while (RUNNING) accept close(sockfd)。attr)。 } 附錄 B: include include int main(int argc, char **argv) { int sockfd。 socklen_t addrlen = addr_size。 int rc, wc。 char server_ip[16] = {39。}。 exit(EXIT_FAILURE)。 while ((c = getopt (argc, argv, p:i:)) != 1) switch (c) { case 39。: 24 server_port = atoi(optarg)。 case 39。: strncpy(server_ip, optarg, 15)。 default: break。 //closed if(sockfd == 1) err_sys(client socket) else printf(sockfd=%d\n, sockfd)。server_addr, addr_size)。 = htons(server_port)。 // int count = 1。server_addr, addrlen) == 1) { if(count ++ 3) { close(sockfd)。 exit(EXIT_FAILURE)。 sleep(3)。 struct timeval ts。 int ret = 1。 = 1。 FD_ZERO(amp。 FD_SET(STDIN_FILENO, amp。 FD_SET(sockfd, amp。 ret = select(maxfd + 1, amp。ts)。 } else { close(sockfd)。 err_sys(server select) } break。 break。readfds)) { memset(buffer_w, 39。, BUFF_SIZE)。 //0 wc = send(sockfd, buffer_w, BUFF_SIZE, 0)。 err_sys(client send) } }//if (FD_ISSET(STDIN_FILENO, amp。readfds)) 26 { memset(buffer_r, 39。, BUFF_SIZE)。 if(rc == 1) { close(sockfd)。 FD_CLR(sockfd, amp。 err_sys(server is shut down) } else { buffer_r[BUFF_SIZE 1] = 39。 pri_rec(buffer_r)。readfds)) break。 exit(EXIT_SUCCESS)。 if(buf[0]==39。) { printf( 你的客戶端號(hào) :%d\n,buf[1])。 27 buf++。 while(*buf) { printf( %d ,*buf++)。39。amp。 } printf(\n)。39。 } //printf(\n)。amp。amp。buf[1]==39。39。 } else { printf(%s\n,buf++)。 } 附錄 D: include USER_LIST creat_pointer(void) { USER_LIST head。 if(head==NULL) err_sys(create malloc:) return head。 pointersocketfd=sockfd。 pointernext=NULL。 } USER_LIST delete_pointer(int num,USER_LIST head) { USER_LIST del_p。 return 1。 free(head)。 return del_p。amp。 del_p=headnext。 free(del_p)。 } int find_user(USER_LIST head,int newfd) { while(head!=NULLamp。headsocketfd!=newfd) head=headnext。 return headnumber。 char buffer[BUFF_SIZE]={0}。amp。039。 if(head==NULL) { wc = send(newfd, amp。, 3, 0)。 //send_list( head)。 err_sys(server send) } } else { buffer[0]=find_user(head,newfd)+39。 if((buffer[0]39。)==0) printf(aaaaaaaaaaaaaaaa\n)。(39。 // strcat(buffer,))。)39。 wc = send(headsocketfd, buffer, BUFF_SIZE, 0)。 //send_list( head)。 err_sys(server send ) } } return 0。 USER_LIST pi=head。 char buf[BUFF_SIZE]={0}。 buf[0]=39。 buf[1]=39。 while(head!=NULL) { buf_c[0]=(unsigned char)headnumber。 while(*p_addr) { *p++=*p_addr++。 strcat(buf,i_ntoa(headsin_addr))。 buf_c[0]=39。 strcat(buf,buf_c)。 wc = send(pisocketfd, buf, BUFF_SIZE, 0)。 } return 0。 return head。在這半學(xué)期的學(xué)習(xí)新理論知識(shí)中 體 現(xiàn)了一個(gè)再學(xué)習(xí)的過(guò)程 ,記得在校時(shí)老師們就說(shuō)過(guò),現(xiàn)
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1