最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

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

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

探索學習新天地,共享知識資源!

0 提交作業(yè)
0 布置作業(yè)
0 滿分作業(yè)
得分 100
學習任務

不愛學習的那誰 的學生作業(yè):

【圖片】 #include #include #include #include #include #include #include #include #include #define LOGIN_SUCCESS 1 #define LOGIN_FAILURE 0 typedef struct { char *ip; unsigned char flag; struct sockaddr_in peer_addr; } thread_type; void recv_data(int new_sockfd, struct sockaddr_in *client_addr) { int n = 0; char buf[1024] = {0}; socklen_t len = sizeof(struct sockaddr_in); while(1) { memset(buf, 0, sizeof(buf)); n = recvfrom(new_sockfd, buf, sizeof(buf), 0, (struct sockaddr *)client_addr, &len); if(n < 0) { perror("Fail to recvfrom"); break; } printf("============================\n"); printf("Recv from IP = %s\n", inet_ntoa(client_addr->sin_addr)); printf("Recv from Port = %d\n", ntohs(client_addr->sin_port)); printf("Recv %d bytes : %s\n", n, buf); if(strncmp(buf, "quit", 4) == 0) break; } close(new_sockfd); } int init_socket(const char *ip, const char *port) { int sockfd; struct sockaddr_in my_addr; sockfd = socket(AF_INET, SOCK_DGRAM, 0); if(sockfd < 0) { perror("Fail to socket!"); exit(EXIT_FAILURE); } memset(&my_addr, 0, sizeof(my_addr)); my_addr.sin_family = AF_INET; my_addr.sin_port = htons(atoi(port)); my_addr.sin_addr.s_addr = inet_addr(ip); if(bind(sockfd, (struct sockaddr *)&my_addr, sizeof(my_addr)) < 0) { perror("Fail to bind"); exit(EXIT_FAILURE); } printf("wait recv data on %s:%s!\n", ip, port); return sockfd; } void *message_thread(void *arg) { thread_type *packet = (thread_type *)arg; int new_sockfd; struct sockaddr_in server_addr; socklen_t len = sizeof(struct sockaddr_in); // 創(chuàng)建新的套接字用于通信 new_sockfd = init_socket(packet->ip, "0"); // 獲取新套接字的地址信息(端口號) getsockname(new_sockfd, (struct sockaddr *)&server_addr, &len); printf("New thread using port: %d\n", ntohs(server_addr.sin_port)); // 發(fā)送登錄成功響應 sendto(new_sockfd, &packet->flag, sizeof(packet->flag), 0, (struct sockaddr *)&packet->peer_addr, sizeof(packet->peer_addr)); // 接收數(shù)據(jù) recv_data(new_sockfd, &packet->peer_addr); // 釋放內(nèi)存 free(packet->ip); free(packet); pthread_exit(NULL); } void user_login(const char *ip, const char *port) { int sockfd; int n = 0; char buf[20] = {0}; struct sockaddr_in client_addr; socklen_t len = sizeof(client_addr); unsigned char login_flag; sockfd = init_socket(ip, port); while(1) { memset(buf, 0, sizeof(buf)); n = recvfrom(sockfd, buf, sizeof(buf), 0, (struct sockaddr *)&client_addr, &len); if(n < 0) { perror("Fail to recvfrom"); continue; } printf("Received key from %s:%d: %s\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port), buf); login_flag = (strncmp(buf, "root", 4) == 0) ? LOGIN_SUCCESS : LOGIN_FAILURE; if(login_flag == LOGIN_SUCCESS) { pthread_t tid; thread_type *packet = malloc(sizeof(thread_type)); packet->flag = login_flag; packet->ip = strdup(ip); memcpy(&packet->peer_addr, &client_addr, sizeof(client_addr)); if(pthread_create(&tid, NULL, message_thread, (void *)packet) == 0) { pthread_detach(tid); printf("Created thread for client %s:%d\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port)); } else { free(packet->ip); free(packet); } } else { // 直接回復登錄失敗 sendto(sockfd, &login_flag, sizeof(login_flag), 0, (struct sockaddr *)&client_addr, len); printf("Login failed for client %s:%d\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port)); } } close(sockfd); } int main(int argc, const char *argv[]) { if(argc != 3) { fprintf(stderr, "Usage : %s ip port!\n", argv[0]); exit(EXIT_FAILURE); } user_login(argv[1], argv[2]); return 0; }

微信客服

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

幫助反饋 APP下載

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

公眾號

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