自贡公司做网站wordpress 解析漏洞
- 作者: 五速梦信息网
- 时间: 2026年04月20日 05:01
当前位置: 首页 > news >正文
自贡公司做网站,wordpress 解析漏洞,wordpress滑动相册,手机号注册网站全双工#xff1a; 通信双方 既可以发送#xff0c;也可以接收数据 1. 利用多线程 或者 多进程#xff0c; 实现TCP服务器 和 客户端的全双工通信 思路#xff1a; 服务器和客户端#xff0c; 在建立通信以后#xff0c;可以创建线程#xff0c;在线程编写另一个功能代… 全双工 通信双方 既可以发送也可以接收数据 1. 利用多线程 或者 多进程 实现TCP服务器 和 客户端的全双工通信 思路 服务器和客户端 在建立通信以后可以创建线程在线程编写另一个功能代码 客户端参考 pthread_handler() {while(1){fgets();send(); } }main() {socket();connect();pthread_create();while(1){recv(); } }服务器参考 pthread_handler() {while(1){ fgets();send(); } }main() {socket();bind();listen();accept();pthread_create();while(1){recv(); } } 客户端示例代码 #include stdio.h #include stdlib.h #include string.h #include unistd.h #include sys/socket.h #include arpa/inet.h #include pthread.h#define BUFFER_SIZE 1024// 接收线程函数 void *client_recv_thread(void *arg) {int sock *(int *)arg; // 从参数中获取socket描述符char buffer[BUFFER_SIZE]; // 用于接收数据的缓冲区while (1) {memset(buffer, 0, BUFFER_SIZE); // 清空缓冲区ssize_t bytes_received recv(sock, buffer, BUFFER_SIZE - 1, 0); // 接收数据if (bytes_received 0) {perror(接收数据失败);break; // 如果接收失败结束线程}printf(收到信息: %s, buffer); // 打印接收到的信息}pthread_exit(NULL); // 结束线程 }int main() {int sock; // 客户端socket描述符struct sockaddr_in server; // 服务器地址结构char buffer[BUFFER_SIZE]; // 用于发送数据的缓冲区sock socket(AF_INET, SOCK_STREAM, 0); // 创建socketif (sock -1) {perror(无法创建socket);return 1;}server.sin_addr.s_addr inet_addr(127.0.0.1); // 设置服务器IP地址server.sin_family AF_INET; // 设置为Internet协议族server.sin_port htons(8888); // 设置服务器端口if (connect(sock, (struct sockaddr *)server, sizeof(server)) 0) { // 连接到服务器perror(连接失败);return 1;}pthread_t thread_id; // 线程IDif (pthread_create(thread_id, NULL, client_recv_thread, sock) ! 0) { // 创建接收线程perror(创建线程失败);return 1;}while (1) { // 主循环用于发送数据printf(输入信息: );fgets(buffer, BUFFER_SIZE, stdin); // 从标准输入读取一行send(sock, buffer, strlen(buffer), 0); // 发送数据}close(sock); // 关闭socketreturn 0; } 服务器代码 #include stdio.h #include stdlib.h #include string.h #include unistd.h #include sys/socket.h #include arpa/inet.h #include pthread.h#define MAX_THREADS 10 #define BUFFER_SIZE 1024// 接收线程函数 void *server_recv_thread(void *arg) {int sock *(int *)arg; // 从参数中获取socket描述符char buffer[BUFFER_SIZE]; // 用于接收数据的缓冲区while (1) {memset(buffer, 0, BUFFER_SIZE); // 清空缓冲区ssize_t bytes_received recv(sock, buffer, BUFFER_SIZE - 1, 0); // 接收数据if (bytes_received 0) {perror(接收数据失败);break; // 如果接收失败结束线程}printf(收到信息: %s, buffer); // 打印接收到的信息}pthread_exit(NULL); // 结束线程 }int main() {int sock, client_sock; // 服务器socket描述符客户端socket描述符struct sockaddr_in server, client; // 服务器和客户端地址结构pthread_t thread_id; // 线程IDsock socket(AF_INET , SOCK_STREAM , 0); // 创建socketif (sock -1) {perror(无法创建socket);return 1;}server.sin_family AF_INET; // 设置为Internet协议族server.sin_addr.s_addr INADDR_ANY; // 监听所有可用接口server.sin_port htons(8888); // 设置服务器端口if (bind(sock, (struct sockaddr *)server , sizeof(server)) 0) { // 绑定socketperror(绑定失败);return 1;}listen(sock, 3); // 开始监听连接printf(等待接收连接…\n);while (1) { // 主循环用于接受新连接socklen_t len sizeof(struct sockaddr_in); // 地址长度client_sock accept(sock, (struct sockaddr *)client, len); // 接受连接if (client_sock 0) {perror(接受连接失败);return 1;}if (pthread_create(thread_id, NULL, server_recv_thread, client_sock) ! 0) { // 创建接收线程perror(创建线程失败);return 1;}}close(sock); // 关闭socketreturn 0; } TCP建立的初衷是 1 对 1 的通信 其本身机制无法完成并发服务器 只能借助其他方法。。。。。 这里不要求实现全双工 2. 利用多线程 或者 多进程实现TCP服务器 可以同时跟多个客户端通信(并发服务器) 思路 每次accept建立通信 服务器都创建一个专属的线程任务与客户端通信 服务器在通信时主要依靠的是acceptfd每次acceptfd的值都代表不同的通信套接字 #include stdio.h #include stdlib.h #include string.h #include unistd.h #include sys/socket.h #include arpa/inet.h #include pthread.h#define MAX_THREADS 10 // 线程池中线程的最大数量 #define BUFFER_SIZE 1024 // 缓冲区大小// 客户端信息结构体 typedef struct {int sock; // 客户端socket描述符 } client_info;// 客户端处理线程函数 void *handle_client(void *arg) {client_info *info (client_info *)arg; // 从参数中获取客户端信息int client_sock info-sock; // 获取客户端socketchar buffer[BUFFER_SIZE]; // 缓冲区用于接收和发送数据// 循环接收并处理客户端数据while (1) {memset(buffer, 0, BUFFER_SIZE); // 清空缓冲区ssize_t bytes_received recv(client_sock, buffer, BUFFER_SIZE - 1, 0); // 接收数据if (bytes_received 0) {printf(客户端断开连接\n);close(client_sock); // 如果客户端断开关闭socketfree(info); // 释放客户端信息结构体pthread_exit(NULL); // 结束线程} else {printf(接收到客户端信息: %s, buffer); // 打印接收到的信息send(client_sock, buffer, bytes_received, 0); // 将接收到的数据原样返回给客户端}} }int main() {int sock, client_sock; // 服务器和客户端socket描述符struct sockaddr_in server, client; // 服务器和客户端地址信息pthread_t thread_id[MAX_THREADS]; // 线程ID数组int active_threads 0; // 当前线程数量// 创建服务器socketsock socket(AF_INET, SOCK_STREAM, 0);if (sock -1) {perror(无法创建socket);return 1;}// 设置服务器地址信息server.sin_family AF_INET;server.sin_addr.s_addr INADDR_ANY;server.sin_port htons(8888);// 绑定服务器地址if (bind(sock, (struct sockaddr *)server, sizeof(server)) 0) {perror(绑定失败);return 1;}// 开始监听连接listen(sock, 3);printf(等待接收连接…\n);// 主循环用于接受新连接while (1) {socklen_t len sizeof(struct sockaddr_in);client_sock accept(sock, (struct sockaddr *)client, len);if (client_sock 0) {perror(接受连接失败);continue;}// 检查线程池是否已满if (active_threads MAX_THREADS) {printf(线程数量已达到上限拒绝连接\n);close(client_sock); // 如果线程池已满关闭新连接的socketcontinue;}// 分配并初始化客户端信息结构体client_info *info malloc(sizeof(client_info));info-sock client_sock;// 创建线程处理新连接if (pthread_create(thread_id[active_threads], NULL, handle_client, info) ! 0) {perror(创建线程失败);continue;}// 增加活动线程数量active_threads;}// 等待所有线程结束for (int i 0; i active_threads; i) {pthread_join(thread_id[i], NULL);}// 关闭服务器socketclose(sock);// 正常退出return 0; }
- 上一篇: 自个做网站教程搬瓦工putty做网站
- 下一篇: 自贡建设机械网站WordPress文章分栏置顶
相关文章
-
自个做网站教程搬瓦工putty做网站
自个做网站教程搬瓦工putty做网站
- 技术栈
- 2026年04月20日
-
自发购卡网站在吗做iis 网站 起不来 temp文件夹
自发购卡网站在吗做iis 网站 起不来 temp文件夹
- 技术栈
- 2026年04月20日
-
自动做图在线网站做网站首页cdr
自动做图在线网站做网站首页cdr
- 技术栈
- 2026年04月20日
-
自贡建设机械网站WordPress文章分栏置顶
自贡建设机械网站WordPress文章分栏置顶
- 技术栈
- 2026年04月20日
-
自贡建设能源开发有限公司网站暴风seo论坛
自贡建设能源开发有限公司网站暴风seo论坛
- 技术栈
- 2026年04月20日
-
自贡企业网站建设公司wordpress页面丢失
自贡企业网站建设公司wordpress页面丢失
- 技术栈
- 2026年04月20日
