第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

作業(yè)社區(qū)

探索學(xué)習(xí)新天地,共享知識資源!

0 提交作業(yè)
0 布置作業(yè)
0 滿分作業(yè)
得分 100
學(xué)習(xí)任務(wù)

北城半夏4806197 的學(xué)生作業(yè):

#include #include #include #include #include /* See NOTES */ #include #include #include int main(int argc, char const *argv[]) { int sfd,ret; struct sockaddr_in svr_addr; ssize_t rbytes = 0,sbytes=0; char buffer[1024] = {0}; if(argc < 3) { fprintf(stderr,"Usage : %s ip port!\n",argv[0]); exit(EXIT_FAILURE); } sfd = socket(AF_INET,SOCK_STREAM,0); if(sfd == -1) { perror("[ERROR] socket():"); exit(EXIT_FAILURE); } bzero(&svr_addr,sizeof(svr_addr)); //清零 svr_addr.sin_family = AF_INET; svr_addr.sin_port = htons(atoi(argv[2])); svr_addr.sin_addr.s_addr = inet_addr(argv[1]); ret = connect(sfd,(const struct sockaddr *)&svr_addr,sizeof(struct sockaddr_in)); if(ret == -1) { perror("[ERROR] connect():"); exit(EXIT_FAILURE); } //客戶端從鍵盤接收數(shù)據(jù) while(1) { putchar('>'); bzero(buffer,sizeof(buffer)); //清零 fgets(buffer,64,stdin); buffer[strlen(buffer)-1] = '\0'; sbytes = send(sfd,buffer,sizeof(buffer),0); if(sbytes == -1) { perror("[ERROR] sbytes():"); exit(EXIT_FAILURE); } if(strncmp(buffer,"quit",4) == 0) break; } //從客戶端發(fā)送數(shù)據(jù) rbytes = recv(sfd,buffer,sizeof(buffer),0); if(rbytes == -1) { perror("[ERROR] send():"); exit(EXIT_FAILURE); } else if(rbytes == 0) { printf("The server hsa been shut down.\n"); } else if(rbytes > 0) { printf("buffer : %s\n",buffer); } close(sfd); return 0; } 【圖片】【圖片】

得分 100
學(xué)習(xí)任務(wù)

胡漢三66 的學(xué)生作業(yè):

udp_client.c #include /* See NOTES */ #include // socket() sendto() #include #include // inet_addr() htons() #include // memset() #include // fgets() #include // close() #include // exit() #define LOGIN_SUCCESS 1 // 宏定義 登錄成功 1 #define LOGIN_FAILURE 0 // 宏定義 登錄失敗 0 void send_data(int sockfd,struct sockaddr_in *addr,int len){ int n = 0; char buf[1024] = {0}; while(1) { printf("Input : "); // 輸入標(biāo)志 memset(buf,0,sizeof(buf)); // 重置 buf空間為 0 fgets(buf,sizeof(buf),stdin); // 獲取 輸入信息 保存到 buf中 buf[strlen(buf) - 1] = '\0'; // '\n'--->'\0' n = sendto(sockfd,buf,strlen(buf),0,(struct sockaddr *)addr,len); // 發(fā)送 buf信息 到目標(biāo)地址 if(n < 0) { perror("Fail to sendto"); exit(EXIT_FAILURE); } if(strncmp(buf,"quit",4) == 0) // 如果輸入 "quit" 退出程序 break; } return ; } void user_login(int sockfd,struct sockaddr_in *addr,struct sockaddr_in *new_addr,int len){ int n = 0; char buf[1024] = {0}; unsigned char flag = LOGIN_FAILURE; // 登錄標(biāo)記 默認失敗 while(1){ putchar('>'); // 輸入標(biāo)志 memset(buf,0,sizeof(buf)); // 重置 buf空間為 0 fgets(buf,sizeof(buf),stdin); // 獲取 輸入信息 保存到 buf中 buf[strlen(buf) - 1] = '\0'; // '\n'--->'\0' n = sendto(sockfd,buf,strlen(buf),0,(struct sockaddr *)addr,len); // 發(fā)送 buf信息 到目標(biāo)地址 if(n < 0){ perror("Fail to sendto"); exit(EXIT_FAILURE); } recvfrom(sockfd,&flag,sizeof(flag),0,(struct sockaddr *)new_addr,&len); // 從服務(wù)端 接收 登錄標(biāo)記 // 用戶登錄標(biāo)記 if(flag == LOGIN_SUCCESS) // 如果成功, 結(jié)束輸入 break; else // 如果失敗, 繼續(xù)輸入 printf("key is invalid,try again!\n"); } return ; } // ./a.out ip port int main(int argc, const char *argv[]) { int sockfd; struct sockaddr_in peer_addr; // 目標(biāo) 地址結(jié)構(gòu)體 struct sockaddr_in server_addr; // 服務(wù)器 地址結(jié)構(gòu)體 int len = sizeof(peer_addr); if(argc != 3){ fprintf(stderr,"Usage : %s ip port!\n",argv[0]); exit(EXIT_FAILURE); } // 1.通過socket創(chuàng)建文件描述符 sockfd = socket(AF_INET,SOCK_DGRAM,0); if(sockfd < 0){ perror("Fail to socket!"); return -1; } // 2.填充服務(wù)器的ip + port memset(&peer_addr,0,sizeof(peer_addr)); // 重置 peer_addr空間為 0 peer_addr.sin_family = AF_INET; // 設(shè)置 協(xié)議族(IP4) peer_addr.sin_port = htons(atoi(argv[2])); // 設(shè)置 目標(biāo)網(wǎng)絡(luò)端口 peer_addr.sin_addr.s_addr = inet_addr(argv[1]); // 設(shè)置 目標(biāo)網(wǎng)絡(luò)IP // 3.發(fā)送登錄數(shù)據(jù) memset(&server_addr,0,sizeof(server_addr)); // 重置 server_addr空間為 0 user_login(sockfd,&peer_addr,&server_addr,len); // 用戶登錄 // 4.發(fā)送交互數(shù)據(jù) send_data(sockfd,&server_addr,len); // 5.關(guān)閉文件描述符 close(sockfd); return 0; } udp_server.c #include /* See NOTES */ #include // socket() sendto() #include #include // inet_addr() htons() #include // memset() #include // fgets() #include // close() #include // exit() #include // signal() #include // waitpid() #define LOGIN_SUCCESS 1 // 宏定義 登錄成功 1 #define LOGIN_FAILURE 0 // 宏定義 登錄失敗 0 void recv_data(int new_sockfd){ // 接收數(shù)據(jù) int n = 0; char buf[1024] = {0}; struct sockaddr_in client_addr; // 客戶端地址 int len = sizeof(client_addr); // 客戶端地址大小 while(1){ memset(buf,0,sizeof(buf)); // 重置 buf空間為 0 n = recvfrom(new_sockfd,buf,sizeof(buf),0,(struct sockaddr *)&client_addr,&len); // 接收信息 if(n < 0){ perror("Fail to recvfrom"); exit(EXIT_FAILURE); } printf("================================\n"); printf("Recv from IP = %s\n", inet_ntoa(client_addr.sin_addr)); // 打印 客戶端 IP printf("Recv from Port = %d\n", ntohs(client_addr.sin_port)); // 打印 客戶端 端口 printf("Recv %d bytes : %s\n",n,buf); // 打印 接收的文件大小 接收的內(nèi)容 if(strncmp(buf,"quit",4) == 0) // 如果輸入 "quit" 退出程序 break; } close(new_sockfd); // 結(jié)束當(dāng)前子進程 exit(EXIT_SUCCESS); } int init_socket(const char *ip,const char *port){ // 創(chuàng)建 套接字 int sockfd; struct sockaddr_in my_addr; // 目標(biāo) 地址結(jié)構(gòu)體 int len = sizeof(my_addr); // 1.通過socket創(chuàng)建文件描述符 sockfd = socket(AF_INET,SOCK_DGRAM,0); if(sockfd < 0){ perror("Fail to socket!"); exit(EXIT_FAILURE); } // 2.填充服務(wù)器的ip + port memset(&my_addr,0,sizeof(my_addr)); // 重置 my_addr空間為 0 my_addr.sin_family = AF_INET; // 設(shè)置 協(xié)議族(IP4) my_addr.sin_port = htons(atoi(port)); // 設(shè)置 目標(biāo)網(wǎng)絡(luò)端口 my_addr.sin_addr.s_addr = inet_addr(ip); // 設(shè)置 目標(biāo)網(wǎng)絡(luò)IP //3.把ip + port與socket綁定 if(bind(sockfd,(struct sockaddr *)&my_addr,len) < 0){ perror("Fail to bind"); exit(EXIT_FAILURE); } printf("wait recv data!\n"); return sockfd; // 返回 套接字 文件描述符. } int user_login(const char *ip,const char *port){ // 用戶登錄, 返回 子進程 套接字文件描述符 int sockfd; int n = 0; char buf[20] = {0}; struct sockaddr_in client_addr; // 客戶端地址 int len = sizeof(client_addr); // 客戶端地址大小 unsigned char login_flag; // 登錄標(biāo)記 int new_sockfd; // 子進程的 套接字 文件描述符 // 1.創(chuàng)建套接字 sockfd = init_socket(ip,port); // 2.接收登錄信息, 父進程負責(zé)驗證秘匙信息, 子進程負責(zé)與用戶進行數(shù)據(jù)交互. while(1){ memset(buf,0,sizeof(buf)); // 重置 buf空間為 0 n = recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr *)&client_addr,&len); // 接收信息 if(n < 0){ perror("Fail to recvfrom"); exit(EXIT_FAILURE); } printf("key = %s\n",buf); login_flag = (strncmp(buf,"root",4) == 0) ? LOGIN_SUCCESS : LOGIN_FAILURE; // 如果輸入 密碼正確為root, 返回標(biāo)記為1 // 此時說明秘鑰正確 if(login_flag == LOGIN_SUCCESS){ // 如果 登錄成功 退出子進程 // 創(chuàng)建子進程,準(zhǔn)備數(shù)據(jù)的交互 if(fork() == 0){ // 子進程 close(sockfd); // 關(guān)閉 復(fù)制的 父進程的 文件描述符 // 綁定0號端口, 系統(tǒng)會隨機分派一個可用的端口 new_sockfd = init_socket(ip,"0"); // 給客戶端的回復(fù)---登錄成功 sendto(new_sockfd,&login_flag,sizeof(login_flag),0,(struct sockaddr *)&client_addr,len); // 接收信息 break; // 退出子進程 } }else{ // 如果 登錄失敗 // 給客戶端的回復(fù)---登錄失敗 sendto(sockfd,&login_flag,sizeof(login_flag),0,(struct sockaddr *)&client_addr,len); // 接收信息 } } return new_sockfd; } void sig_handler(int signum){ waitpid(-1,NULL,WNOHANG); printf("recv signum = %d zombie\n",signum); return; } // ./a.out ip port int main(int argc, const char *argv[]) { int sockfd; if(argc != 3){ // 判斷 輸入數(shù)據(jù) 是否有3個 fprintf(stderr,"Usage : %s ip port!\n",argv[0]); exit(EXIT_FAILURE); } // 0.主進程回收僵尸態(tài)子進程 if(signal(SIGCHLD,sig_handler) == SIG_ERR) { perror("Fail to signal"); return -1; } // 1.接收用戶的秘鑰, 準(zhǔn)備登錄 sockfd = user_login(argv[1],argv[2]); // 2.接收數(shù)據(jù) recv_data(sockfd); // 3.關(guān)閉文件描述符 close(sockfd); return 0; }

微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號