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

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

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

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

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

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

#include // 標(biāo)準(zhǔn)輸入輸出 #include // exit、malloc 等函數(shù) #include // 字符串處理 #include // close、read、write 等系統(tǒng)調(diào)用 #include // socket 地址結(jié)構(gòu)與轉(zhuǎn)換函數(shù) #include // 文件控制(未用到可選) #include // socket 編程核心頭文件 #define PORT 8080 // 服務(wù)器監(jiān)聽端口號 #define BUFFER_SIZE 4096 // 緩沖區(qū)大小 int main() { int server_fd, client_fd; struct sockaddr_in addr; // 服務(wù)器地址結(jié)構(gòu) socklen_t addrlen = sizeof(addr); char buffer[BUFFER_SIZE]; // 用于接收請求、讀取文件的緩沖區(qū) // 1. 創(chuàng)建 TCP socket,AF_INET: IPv4,SOCK_STREAM: 面向連接 server_fd = socket(AF_INET, SOCK_STREAM, 0); if (server_fd < 0) { perror("socket 創(chuàng)建失敗"); exit(1); } // 2. 設(shè)置地址端口復(fù)用(防止端口 TIME_WAIT 占用) int opt = 1; setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); // 3. 設(shè)置服務(wù)器地址信息 memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; // IPv4 addr.sin_addr.s_addr = INADDR_ANY; // 本地任意地址 0.0.0.0 addr.sin_port = htons(PORT); // 端口轉(zhuǎn)為網(wǎng)絡(luò)字節(jié)序 // 4. 綁定 socket 到地址和端口 if (bind(server_fd, (struct sockaddr*)&addr, sizeof(addr)) < 0) { perror("bind 失敗"); close(server_fd); exit(1); } // 5. 開始監(jiān)聽端口,最大連接隊列長度為 10 if (listen(server_fd, 10) < 0) { perror("listen 失敗"); close(server_fd); exit(1); } printf("服務(wù)器啟動成功,監(jiān)聽端口 %d...\n", PORT); // 6. 主循環(huán):不斷接收客戶端連接 while (1) { client_fd = accept(server_fd, (struct sockaddr*)&addr, &addrlen); if (client_fd < 0) { perror("accept 失敗"); continue; } // 7. 接收客戶端發(fā)送的 HTTP 請求 ssize_t len = recv(client_fd, buffer, BUFFER_SIZE - 1, 0); if (len 0) { send(client_fd, buffer, len, 0); // 按塊發(fā)送文件內(nèi)容 } // 11. 清理資源 fclose(fp); close(client_fd); } // 12. 關(guān)閉服務(wù)器 socket close(server_fd); return 0; }

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

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

#include #include #include #include #include #include #include void print_pixel_format(__u32 pixelformat) { char fmt[5] = {0}; fmt[0] = pixelformat & 0xff; fmt[1] = (pixelformat >> 8) & 0xff; fmt[2] = (pixelformat >> 16) & 0xff; fmt[3] = (pixelformat >> 24) & 0xff; printf("像素格式: %s\n", fmt); } int main() { const char *device = "/dev/video0"; int fd = open(device, O_RDWR); if (fd < 0) { perror("打開攝像頭失敗"); return 1; } // 查詢攝像頭能力集 struct v4l2_capability cap; if (ioctl(fd, VIDIOC_QUERYCAP, &cap) < 0) { perror("查詢攝像頭能力失敗"); close(fd); return 1; } printf("攝像頭名稱: %s\n", cap.card); printf("驅(qū)動名稱: %s\n", cap.driver); printf("總線信息: %s\n", cap.bus_info); if (!(cap.capabilities & V4L2_CAP_VIDEO_CAPTURE)) { printf("該設(shè)備不支持視頻采集。\n"); close(fd); return 1; } // 查詢支持的像素格式 printf("\n支持的像素格式與分辨率:\n"); struct v4l2_fmtdesc fmt; memset(&fmt, 0, sizeof(fmt)); fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; while (ioctl(fd, VIDIOC_ENUM_FMT, &fmt) == 0) { print_pixel_format(fmt.pixelformat); printf("說明: %s\n", fmt.description); // 查詢該像素格式下支持的分辨率 struct v4l2_frmsizeenum frmsize; memset(&frmsize, 0, sizeof(frmsize)); frmsize.pixel_format = fmt.pixelformat; while (ioctl(fd, VIDIOC_ENUM_FRAMESIZES, &frmsize) == 0) { if (frmsize.type == V4L2_FRMSIZE_TYPE_DISCRETE) { printf(" %ux%u\n", frmsize.discrete.width, frmsize.discrete.height); } frmsize.index++; } fmt.index++; printf("-------------------------\n"); } close(fd); return 0; }

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

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

服務(wù)端 #include // 標(biāo)準(zhǔn)輸入輸出 #include // malloc、exit 等 #include // memset、strlen #include // close、read、write 等系統(tǒng)調(diào)用 #include // IP 地址轉(zhuǎn)換函數(shù) #include // 套接字編程相關(guān)結(jié)構(gòu)和函數(shù) #define SERVER_PORT 8890 // 服務(wù)器監(jiān)聽端口號 #define BACKLOG 5 // 最大連接等待隊列長度 #define BUFFER_SIZE 1024 // 文件傳輸緩沖區(qū)大小 // 處理客戶端發(fā)送的文件并將其保存到本地磁盤 void receive_file(int conn_fd) { int name_len; // 用于接收文件名的長度 char filename[256]; // 保存接收到的文件名 long filesize; // 文件大?。▎挝唬鹤止?jié)) // 1. 接收文件名長度(int 類型,4 字節(jié)) recv(conn_fd, &name_len, sizeof(int), 0); // 2. 接收文件名(不含路徑) recv(conn_fd, filename, name_len, 0); filename[name_len] = '\0'; // 添加字符串結(jié)束符 printf("接收文件名:%s\n", filename); // 3. 接收文件大小(long 類型,8 字節(jié)) recv(conn_fd, &filesize, sizeof(long), 0); printf("文件大小:%ld 字節(jié)\n", filesize); // 4. 打開目標(biāo)文件,準(zhǔn)備寫入內(nèi)容 FILE *fp = fopen(filename, "wb"); if (!fp) { perror("無法創(chuàng)建文件"); return; } // 5. 接收文件內(nèi)容并寫入文件 char buffer[BUFFER_SIZE]; long received = 0; while (received < filesize) { ssize_t len = recv(conn_fd, buffer, sizeof(buffer), 0); if (len 0) { send(sockfd, buffer, read_bytes, 0); // 每次發(fā)送一段 } fclose(fp); // 關(guān)閉文件 printf("文件發(fā)送完成。\n"); } int main() { // 創(chuàng)建客戶端 socket int sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { perror("socket 創(chuàng)建失敗"); return 1; } // 設(shè)置服務(wù)器地址結(jié)構(gòu)體 struct sockaddr_in server_addr; memset(&server_addr, 0, sizeof(server_addr)); // 清空結(jié)構(gòu)體 server_addr.sin_family = AF_INET; // IPv4 server_addr.sin_port = htons(SERVER_PORT); // 設(shè)置端口 // 轉(zhuǎn)換 IP 地址為網(wǎng)絡(luò)格式 if (inet_pton(AF_INET, SERVER_IP, &server_addr.sin_addr)

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

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

服務(wù)端 #include // 標(biāo)準(zhǔn)輸入輸出 #include // malloc、exit 等 #include // memset、strlen #include // close、read、write 等系統(tǒng)調(diào)用 #include // IP 地址轉(zhuǎn)換函數(shù) #include // 套接字編程相關(guān)結(jié)構(gòu)和函數(shù) #define SERVER_PORT 8890 // 服務(wù)器監(jiān)聽端口號 #define BACKLOG 5 // 最大連接等待隊列長度 #define BUFFER_SIZE 1024 // 文件傳輸緩沖區(qū)大小 // 處理客戶端發(fā)送的文件并將其保存到本地磁盤 void receive_file(int conn_fd) { int name_len; // 用于接收文件名的長度 char filename[256]; // 保存接收到的文件名 long filesize; // 文件大?。▎挝唬鹤止?jié)) // 1. 接收文件名長度(int 類型,4 字節(jié)) recv(conn_fd, &name_len, sizeof(int), 0); // 2. 接收文件名(不含路徑) recv(conn_fd, filename, name_len, 0); filename[name_len] = '\0'; // 添加字符串結(jié)束符 printf("接收文件名:%s\n", filename); // 3. 接收文件大?。╨ong 類型,8 字節(jié)) recv(conn_fd, &filesize, sizeof(long), 0); printf("文件大?。?ld 字節(jié)\n", filesize); // 4. 打開目標(biāo)文件,準(zhǔn)備寫入內(nèi)容 FILE *fp = fopen(filename, "wb"); if (!fp) { perror("無法創(chuàng)建文件"); return; } // 5. 接收文件內(nèi)容并寫入文件 char buffer[BUFFER_SIZE]; long received = 0; while (received < filesize) { ssize_t len = recv(conn_fd, buffer, sizeof(buffer), 0); if (len 0) { send(sockfd, buffer, read_bytes, 0); // 每次發(fā)送一段 } fclose(fp); // 關(guān)閉文件 printf("文件發(fā)送完成。\n"); } int main() { // 創(chuàng)建客戶端 socket int sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { perror("socket 創(chuàng)建失敗"); return 1; } // 設(shè)置服務(wù)器地址結(jié)構(gòu)體 struct sockaddr_in server_addr; memset(&server_addr, 0, sizeof(server_addr)); // 清空結(jié)構(gòu)體 server_addr.sin_family = AF_INET; // IPv4 server_addr.sin_port = htons(SERVER_PORT); // 設(shè)置端口 // 轉(zhuǎn)換 IP 地址為網(wǎng)絡(luò)格式 if (inet_pton(AF_INET, SERVER_IP, &server_addr.sin_addr)

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

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

服務(wù)端 #include // 標(biāo)準(zhǔn)輸入輸出 #include // malloc、exit 等 #include // memset、strlen #include // close、read、write 等系統(tǒng)調(diào)用 #include // IP 地址轉(zhuǎn)換函數(shù) #include // 套接字編程相關(guān)結(jié)構(gòu)和函數(shù) #define SERVER_PORT 8890 // 服務(wù)器監(jiān)聽端口號 #define BACKLOG 5 // 最大連接等待隊列長度 #define BUFFER_SIZE 1024 // 文件傳輸緩沖區(qū)大小 // 處理客戶端發(fā)送的文件并將其保存到本地磁盤 void receive_file(int conn_fd) { int name_len; // 用于接收文件名的長度 char filename[256]; // 保存接收到的文件名 long filesize; // 文件大?。▎挝唬鹤止?jié)) // 1. 接收文件名長度(int 類型,4 字節(jié)) recv(conn_fd, &name_len, sizeof(int), 0); // 2. 接收文件名(不含路徑) recv(conn_fd, filename, name_len, 0); filename[name_len] = '\0'; // 添加字符串結(jié)束符 printf("接收文件名:%s\n", filename); // 3. 接收文件大小(long 類型,8 字節(jié)) recv(conn_fd, &filesize, sizeof(long), 0); printf("文件大?。?ld 字節(jié)\n", filesize); // 4. 打開目標(biāo)文件,準(zhǔn)備寫入內(nèi)容 FILE *fp = fopen(filename, "wb"); if (!fp) { perror("無法創(chuàng)建文件"); return; } // 5. 接收文件內(nèi)容并寫入文件 char buffer[BUFFER_SIZE]; long received = 0; while (received < filesize) { ssize_t len = recv(conn_fd, buffer, sizeof(buffer), 0); if (len 0) { send(sockfd, buffer, read_bytes, 0); // 每次發(fā)送一段 } fclose(fp); // 關(guān)閉文件 printf("文件發(fā)送完成。\n"); } int main() { // 創(chuàng)建客戶端 socket int sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { perror("socket 創(chuàng)建失敗"); return 1; } // 設(shè)置服務(wù)器地址結(jié)構(gòu)體 struct sockaddr_in server_addr; memset(&server_addr, 0, sizeof(server_addr)); // 清空結(jié)構(gòu)體 server_addr.sin_family = AF_INET; // IPv4 server_addr.sin_port = htons(SERVER_PORT); // 設(shè)置端口 // 轉(zhuǎn)換 IP 地址為網(wǎng)絡(luò)格式 if (inet_pton(AF_INET, SERVER_IP, &server_addr.sin_addr)

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

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

服務(wù)端 #include // 標(biāo)準(zhǔn)輸入輸出 #include // malloc、exit 等 #include // memset、strlen #include // close、read、write 等系統(tǒng)調(diào)用 #include // IP 地址轉(zhuǎn)換函數(shù) #include // 套接字編程相關(guān)結(jié)構(gòu)和函數(shù) #define SERVER_PORT 8890 // 服務(wù)器監(jiān)聽端口號 #define BACKLOG 5 // 最大連接等待隊列長度 #define BUFFER_SIZE 1024 // 文件傳輸緩沖區(qū)大小 // 處理客戶端發(fā)送的文件并將其保存到本地磁盤 void receive_file(int conn_fd) { int name_len; // 用于接收文件名的長度 char filename[256]; // 保存接收到的文件名 long filesize; // 文件大小(單位:字節(jié)) // 1. 接收文件名長度(int 類型,4 字節(jié)) recv(conn_fd, &name_len, sizeof(int), 0); // 2. 接收文件名(不含路徑) recv(conn_fd, filename, name_len, 0); filename[name_len] = '\0'; // 添加字符串結(jié)束符 printf("接收文件名:%s\n", filename); // 3. 接收文件大?。╨ong 類型,8 字節(jié)) recv(conn_fd, &filesize, sizeof(long), 0); printf("文件大?。?ld 字節(jié)\n", filesize); // 4. 打開目標(biāo)文件,準(zhǔn)備寫入內(nèi)容 FILE *fp = fopen(filename, "wb"); if (!fp) { perror("無法創(chuàng)建文件"); return; } // 5. 接收文件內(nèi)容并寫入文件 char buffer[BUFFER_SIZE]; long received = 0; while (received < filesize) { ssize_t len = recv(conn_fd, buffer, sizeof(buffer), 0); if (len 0) { send(sockfd, buffer, read_bytes, 0); // 每次發(fā)送一段 } fclose(fp); // 關(guān)閉文件 printf("文件發(fā)送完成。\n"); } int main() { // 創(chuàng)建客戶端 socket int sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { perror("socket 創(chuàng)建失敗"); return 1; } // 設(shè)置服務(wù)器地址結(jié)構(gòu)體 struct sockaddr_in server_addr; memset(&server_addr, 0, sizeof(server_addr)); // 清空結(jié)構(gòu)體 server_addr.sin_family = AF_INET; // IPv4 server_addr.sin_port = htons(SERVER_PORT); // 設(shè)置端口 // 轉(zhuǎn)換 IP 地址為網(wǎng)絡(luò)格式 if (inet_pton(AF_INET, SERVER_IP, &server_addr.sin_addr)

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

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

接收端 #include // 標(biāo)準(zhǔn)輸入輸出函數(shù)(如 printf、perror) #include // 包含 exit、malloc 等函數(shù) #include // 包含 memset、strlen 等字符串處理函數(shù) #include // 提供 close 等系統(tǒng)調(diào)用函數(shù) #include // 提供 htons、inet_ntop 等 IP 轉(zhuǎn)換函數(shù) #include // 提供 socket 編程相關(guān)結(jié)構(gòu)與函數(shù) #define SERVER_PORT 8890 // 服務(wù)器監(jiān)聽端口 #define BACKLOG 5 // 最大排隊連接數(shù) #define BUFFER_SIZE 1024 // 每次讀寫的緩沖區(qū)大小 // 接收客戶端發(fā)來的文件并保存到本地 void receive_file(int conn_fd) { int name_len; // 文件名長度(int 類型) char filename[256]; // 文件名緩沖區(qū) long filesize; // 文件大?。╨ong 類型) // 1. 讀取文件名長度(占 4 字節(jié)) recv(conn_fd, &name_len, sizeof(int), 0); // 2. 讀取文件名字符串(不含路徑) recv(conn_fd, filename, name_len, 0); filename[name_len] = '\0'; // 添加字符串結(jié)束符 printf("接收文件名:%s\n", filename); // 3. 接收文件大小(占 8 字節(jié)) recv(conn_fd, &filesize, sizeof(long), 0); printf("文件大小:%ld 字節(jié)\n", filesize); // 4. 打開本地文件,準(zhǔn)備寫入內(nèi)容 FILE *fp = fopen(filename, "wb"); if (!fp) { perror("無法創(chuàng)建文件"); return; } // 5. 循環(huán)接收文件內(nèi)容 char buffer[BUFFER_SIZE]; long received = 0; while (received < filesize) { ssize_t len = recv(conn_fd, buffer, sizeof(buffer), 0); if (len 0) { send(sockfd, buffer, read_bytes, 0); // 分片發(fā)送 } fclose(fp); // 關(guān)閉文件 printf("文件發(fā)送完成。\n"); } int main() { // 創(chuàng)建客戶端 socket int sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { perror("socket 創(chuàng)建失敗"); return 1; } // 設(shè)置服務(wù)端地址信息 struct sockaddr_in server_addr; memset(&server_addr, 0, sizeof(server_addr)); // 清零 server_addr.sin_family = AF_INET; server_addr.sin_port = htons(SERVER_PORT); // 設(shè)置端口 // 轉(zhuǎn)換 IP 地址為網(wǎng)絡(luò)格式 if (inet_pton(AF_INET, SERVER_IP, &server_addr.sin_addr)

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

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

服務(wù)端 #include // 標(biāo)準(zhǔn)輸入輸出頭文件,包含 printf、perror 等 #include // 包含 exit、malloc 等函數(shù) #include // 包含字符串處理函數(shù),如 memset、strlen #include // 包含 close、read、write 等 Unix/Linux 系統(tǒng)調(diào)用 #include // 包含 IP 地址轉(zhuǎn)換函數(shù),如 inet_ntop、htons #include // 包含 socket 函數(shù)與結(jié)構(gòu)體定義 #define SERVER_PORT 8890 // 服務(wù)端監(jiān)聽的端口號 #define BACKLOG 5 // 最大連接請求隊列長度 #define BUFFER_SIZE 1024 // 緩沖區(qū)最大長度(接收/發(fā)送) // 創(chuàng)建 TCP 服務(wù)器監(jiān)聽 socket,并綁定指定 IP 和端口 int tcp_socket_create(const char *ip, int port, int backlog) { int sockfd = socket(AF_INET, SOCK_STREAM, 0); // 創(chuàng)建 IPv4、TCP 套接字 if (sockfd < 0) { perror("socket failed"); // 創(chuàng)建失敗時輸出錯誤信息 return -1; } // 設(shè)置 socket 地址重用選項,防止 bind 報錯 "Address already in use" int opt = 1; setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); struct sockaddr_in addr; memset(&addr, 0, sizeof(addr)); // 初始化結(jié)構(gòu)體為 0 addr.sin_family = AF_INET; // 設(shè)置地址族為 IPv4 addr.sin_addr.s_addr = INADDR_ANY; // 監(jiān)聽所有本地 IP 地址(0.0.0.0) addr.sin_port = htons(SERVER_PORT); // 設(shè)置監(jiān)聽端口,使用網(wǎng)絡(luò)字節(jié)序 // 綁定 socket 到本地地址與端口 if (bind(sockfd, (struct sockaddr *) &addr, sizeof(addr)) < 0) { perror("bind failed"); // 綁定失敗 close(sockfd); return -1; } // 啟動監(jiān)聽,將 socket 設(shè)為被動連接模式 if (listen(sockfd, backlog) < 0) { perror("listen failed"); // 監(jiān)聽失敗 close(sockfd); return -1; } return sockfd; // 返回監(jiān)聽套接字 } // 處理每個客戶端連接的函數(shù) void handle_client(int conn_fd, struct sockaddr_in *client_addr) { char buffer[BUFFER_SIZE]; // 接收客戶端消息的緩沖區(qū) char client_ip[INET_ADDRSTRLEN]; // 存儲客戶端 IP 字符串 // 將客戶端 IP 地址轉(zhuǎn)換為可讀字符串格式 inet_ntop(AF_INET, &client_addr->sin_addr, client_ip, sizeof(client_ip)); // 將端口號從網(wǎng)絡(luò)字節(jié)序轉(zhuǎn)換為主機字節(jié)序 int client_port = ntohs(client_addr->sin_port); printf("客戶端已連接:%s:%d\n", client_ip, client_port); // 循環(huán)接收客戶端消息并回顯 while (1) { // 接收客戶端消息 ssize_t len = recv(conn_fd, buffer, sizeof(buffer) - 1, 0); if (len < 0) { printf("客戶端斷開連接\n"); // 接收失敗 break; } buffer[len] = '\0'; // 添加字符串結(jié)束符,構(gòu)成合法 C 字符串 printf("收到消息:%s\n", buffer); // 構(gòu)造服務(wù)端回顯響應(yīng)內(nèi)容 char reply[BUFFER_SIZE]; snprintf(reply, sizeof(reply), "服務(wù)端已收到: %s", buffer); // 將回應(yīng)內(nèi)容發(fā)回客戶端 send(conn_fd, reply, strlen(reply), 0); } // 關(guān)閉客戶端連接 socket close(conn_fd); } // 主函數(shù):程序入口 int main(int argc, char *argv[]) { // 創(chuàng)建監(jiān)聽 socket,并綁定本地端口 int listen_fd = tcp_socket_create("0.0.0.0", SERVER_PORT, BACKLOG); if (listen_fd < 0) { fprintf(stderr, "監(jiān)聽 socket 創(chuàng)建失敗。退出\n"); return -1; } printf("服務(wù)端啟動,監(jiān)聽端口 %d\n", SERVER_PORT); // 主循環(huán):接收并處理客戶端連接 while (1) { struct sockaddr_in client_addr; // 用于存儲客戶端地址信息 socklen_t client_len = sizeof(client_addr); // 接受客戶端連接請求,阻塞等待連接 int conn_fd = accept(listen_fd, (struct sockaddr *) &client_addr, &client_len); if (conn_fd < 0) { perror("accept failed"); // 接收失敗 continue; } // 處理客戶端連接 handle_client(conn_fd, &client_addr); } // 關(guān)閉監(jiān)聽 socket close(listen_fd); return 0; } 客戶端 #include // 標(biāo)準(zhǔn)輸入輸出,如 printf、fprintf #include // 包含 exit 函數(shù) #include // 字符串處理,如 strlen、strcspn #include // 包含 close 函數(shù) #include // 網(wǎng)絡(luò)地址轉(zhuǎn)換函數(shù),如 inet_pton #include // socket API 函數(shù) #define SERVER_IP "127.0.0.1" // 服務(wù)器 IP 地址(本地環(huán)回地址) #define SERVER_PORT 8890 // 服務(wù)器端口號(需與服務(wù)端保持一致) #define BUFFER_SIZE 1024 // 緩沖區(qū)最大長度 // 創(chuàng)建 TCP 客戶端 socket 并連接服務(wù)器 int tcp_client_connect(const char *ip, int port) { // 創(chuàng)建 socket(IPv4 + TCP) int sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { perror("socket 創(chuàng)建失敗"); return -1; } // 配置服務(wù)器地址結(jié)構(gòu) struct sockaddr_in server_addr; memset(&server_addr, 0, sizeof(server_addr)); // 清零初始化 server_addr.sin_family = AF_INET; // IPv4 server_addr.sin_port = htons(port); // 設(shè)置端口(轉(zhuǎn)為網(wǎng)絡(luò)字節(jié)序) // 將 IP 字符串轉(zhuǎn)換為二進制形式 if (inet_pton(AF_INET, ip, &server_addr.sin_addr)

微信客服

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

幫助反饋 APP下載

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

公眾號

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