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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

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

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

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

浪潮君 的學(xué)生作業(yè):

#include // 標(biāo)準(zhǔn)輸入輸出庫(kù) #include // 提供 exit(), malloc(), free() #include // 提供字符串操作函數(shù),如 strlen(), strncpy(), memcpy() #include // 提供 close(), pthread_exit() #include // POSIX 線程庫(kù),用于創(chuàng)建和管理線程 #include // 提供 socket 通信接口 #include // 提供 sockaddr_in 結(jié)構(gòu)和端口、地址常量 #include // 提供 inet_ntoa 等 IP 地址轉(zhuǎn)換函數(shù) #define SERVER_PORT 8888 // 服務(wù)器監(jiān)聽(tīng)的 UDP 端口號(hào) #define BUFFER_SIZE 1024 // 緩沖區(qū)大?。ń邮?發(fā)送用) #define PREFIX "回顯: " // 回復(fù)前綴,回顯消息統(tǒng)一加上該前綴 // 線程參數(shù)結(jié)構(gòu)體:用于傳遞每條消息的上下文給線程處理 typedef struct { int sockfd; // socket 文件描述符 struct sockaddr_in client_addr; // 客戶端地址結(jié)構(gòu)體 char message[BUFFER_SIZE]; // 客戶端發(fā)送的消息內(nèi)容 ssize_t msg_len; // 客戶端消息實(shí)際長(zhǎng)度(字節(jié)數(shù)) } thread_arg_t; // 線程處理函數(shù):每次接收到客戶端數(shù)據(jù)后就創(chuàng)建線程執(zhí)行該函數(shù) void *handle_client(void *arg) { thread_arg_t *client = (thread_arg_t *) arg; // 將 void* 參數(shù)轉(zhuǎn)換為 thread_arg_t* char reply[BUFFER_SIZE]; // 構(gòu)造回復(fù)消息的緩沖區(qū) size_t prefix_len = strlen(PREFIX); // 獲取前綴長(zhǎng)度 ssize_t reply_len = client->msg_len; // 獲取客戶端消息長(zhǎng)度 // 防止拼接后超出 reply 緩沖區(qū),進(jìn)行長(zhǎng)度截?cái)嗵幚? if (prefix_len + reply_len + 1 > BUFFER_SIZE) { reply_len = BUFFER_SIZE - prefix_len - 1; } // 拼接回顯消息:將 "回顯: " 前綴和客戶端消息合并 memcpy(reply, PREFIX, prefix_len); // 復(fù)制前綴 memcpy(reply + prefix_len, client->message, reply_len); // 復(fù)制消息內(nèi)容 reply[prefix_len + reply_len] = '\0'; // 添加字符串結(jié)束符 // 打印客戶端的 IP、端口和消息內(nèi)容 printf("收到來(lái)自 %s:%d 的數(shù)據(jù) :%s\n", inet_ntoa(client->client_addr.sin_addr), // 將 IP 地址轉(zhuǎn)為字符串 ntohs(client->client_addr.sin_port), // 將端口號(hào)從網(wǎng)絡(luò)字節(jié)序轉(zhuǎn)為主機(jī)字節(jié)序 client->message); // 打印原始消息 // 發(fā)送回顯消息給客戶端 sendto(client->sockfd, reply, prefix_len + reply_len, 0, (struct sockaddr*) &client->client_addr, sizeof(client->client_addr)); free(client); // 釋放線程使用的動(dòng)態(tài)內(nèi)存 pthread_exit(NULL); // 線程退出 } // 主函數(shù):負(fù)責(zé) socket 初始化、接收數(shù)據(jù)并啟動(dòng)線程 int main(int argc, char *argv[]) { int sockfd; // socket 描述符 struct sockaddr_in server_addr, client_addr; // 服務(wù)器和客戶端地址結(jié)構(gòu) socklen_t addr_len = sizeof(client_addr); // 客戶端地址長(zhǎng)度 // 創(chuàng)建 UDP socket,指定為 IPv4 + 無(wú)連接數(shù)據(jù)報(bào)類型 if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { perror("sock failed"); // 打印錯(cuò)誤信息 exit(EXIT_FAILURE); // 創(chuàng)建失敗則退出 } // 初始化服務(wù)器地址結(jié)構(gòu)體,清零后設(shè)置協(xié)議族、IP 和端口 memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; // 設(shè)置地址族為 IPv4 server_addr.sin_addr.s_addr = INADDR_ANY; // 接收任意本地地址的數(shù)據(jù) server_addr.sin_port = htons(SERVER_PORT); // 綁定端口(主機(jī)字節(jié)序轉(zhuǎn)網(wǎng)絡(luò)字節(jié)序) // 將 socket 綁定到本地地址和端口 if (bind(sockfd, (struct sockaddr*) &server_addr, sizeof(server_addr)) < 0) { perror("bind failed"); // 打印綁定失敗信息 close(sockfd); // 關(guān)閉 socket exit(EXIT_FAILURE); // 退出程序 } printf("多線程UDP服務(wù)器啟動(dòng)成功,監(jiān)聽(tīng)端口 %d...\n", SERVER_PORT); // 主循環(huán):持續(xù)接收客戶端 UDP 消息,并為每條消息創(chuàng)建一個(gè)線程處理 while (1) { char buffer[BUFFER_SIZE]; // 接收緩沖區(qū) // 接收客戶端發(fā)送的 UDP 數(shù)據(jù)報(bào) ssize_t recv_len = recvfrom(sockfd, buffer, BUFFER_SIZE - 1, 0, (struct sockaddr*) &client_addr, &addr_len); if (recv_len < 0) { perror("recvfrom failed"); // 接收失敗,打印錯(cuò)誤信息 continue; // 繼續(xù)接收下一個(gè)客戶端消息 } buffer[recv_len] = '\0'; // 添加字符串結(jié)束符,確??纱蛴? // 動(dòng)態(tài)分配線程參數(shù)結(jié)構(gòu)體 thread_arg_t *client = malloc(sizeof(thread_arg_t)); if (!client) { fprintf(stderr, "內(nèi)存分配失敗"); // 打印分配失敗信息 continue; // 不處理當(dāng)前消息,繼續(xù)等待下一條 } // 填充線程參數(shù)結(jié)構(gòu)體 client->sockfd = sockfd; // socket 描述符 client->client_addr = client_addr; // 客戶端地址 client->msg_len = recv_len; // 消息長(zhǎng)度 strncpy(client->message, buffer, BUFFER_SIZE); // 拷貝消息內(nèi)容 client->message[BUFFER_SIZE - 1] = '\0'; // 手動(dòng)添加結(jié)束符,避免溢出 // 創(chuàng)建線程處理當(dāng)前客戶端請(qǐng)求 pthread_t tid; if (pthread_create(&tid, NULL, handle_client, client) != 0) { perror("線程創(chuàng)建失敗"); free(client); // 創(chuàng)建失敗需釋放內(nèi)存 } // 設(shè)置線程為分離狀態(tài),自動(dòng)釋放資源(不需要 pthread_join) pthread_detach(tid); } close(sockfd); // 程序退出前關(guān)閉 socket return 0; }

微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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