当前位置: 首页 > news >正文

做暖漫画网站处理器优化软件

做暖漫画网站,处理器优化软件,10个奇怪又有趣的网站,南昌企业网站建设公司哪个好在上期的socket套接字的使用详解中(socket套接字的使用详解)最后实现的TCP服务器只能处理一个客户端的请求发送,当有其他客户端请求连接时会被阻塞。为了能同时处理多个客户端的连接请求,本期使用多进程的方式来解决。 解决方案步…

在上期的socket套接字的使用详解中(socket套接字的使用详解)最后实现的TCP服务器只能处理一个客户端的请求发送,当有其他客户端请求连接时会被阻塞。为了能同时处理多个客户端的连接请求,本期使用多进程的方式来解决。

解决方案步骤总结

  1. 初始化服务器

    • 创建监听套接字(socket)。
    • 绑定套接字到指定地址和端口(bind)。
    • 开始监听连接请求(listen)。
  2. 等待连接

    • 进入一个无限循环,等待并接受客户端连接(accept)。
  3. 创建子进程

    • 每当接受到一个新的客户端连接,创建一个子进程(fork)。
    • 子进程负责与客户端通信,处理请求并发送响应。
  4. 父进程继续监听

    • 父进程关闭与客户端通信的套接字,继续监听新的连接请求。
  5. 处理子进程结束信号(可选)

    • 注册信号处理函数,处理子进程结束信号,避免僵尸进程。

示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <signal.h>
#include <ctype.h>// 处理SIGCHLD信号,避免僵尸进程
void sigchld_handler(int signo) {while (waitpid(-1, NULL, WNOHANG) > 0); //表示非阻塞地等待任意子进程终止。-1 表示等待任何子进程,NULL 表示不需要子进程的退出状态,WNOHANG 表示非阻塞。
}// 处理客户端通信
void handle_client(int cfd) {char buf[1024];int n;while ((n = read(cfd, buf, sizeof(buf))) > 0) {for (int i = 0; i < n; i++) {buf[i] = toupper(buf[i]);}write(cfd, buf, n);}close(cfd);
}int main() {// 创建监听套接字int lfd = socket(AF_INET, SOCK_STREAM, 0);if (lfd < 0) {perror("socket error");return -1;}// 绑定套接字struct sockaddr_in serv;bzero(&serv, sizeof(serv));serv.sin_family = AF_INET;serv.sin_port = htons(8888);serv.sin_addr.s_addr = htonl(INADDR_ANY);if (bind(lfd, (struct sockaddr *)&serv, sizeof(serv)) < 0) {perror("bind error");return -1;}// 监听连接请求listen(lfd, 3);// 设置SIGCHLD信号处理struct sigaction sa;sa.sa_handler = sigchld_handler;sigemptyset(&sa.sa_mask);           // 初始化信号屏蔽字为空。sa.sa_flags = SA_RESTART;           //设置信号处理之后自动重新启动被信号打断的系统调用。if (sigaction(SIGCHLD, &sa, NULL) < 0) {perror("sigaction error");return -1;}while (1) {struct sockaddr_in client;socklen_t len = sizeof(client);int cfd = accept(lfd, (struct sockaddr *)&client, &len);if (cfd < 0) {perror("accept error");continue;}// 打印客户端连接信息char sIP[16];memset(sIP, 0x00, sizeof(sIP));printf("Client connected: IP [%s], PORT [%d]\n", inet_ntop(AF_INET, &client.sin_addr.s_addr, sIP, sizeof(sIP)), ntohs(client.sin_port));pid_t pid = fork();if (pid == 0) { // 子进程close(lfd); // 子进程关闭监听套接字handle_client(cfd); // 处理客户端通信printf("Client disconnected: IP [%s], PORT [%d]\n", inet_ntop(AF_INET, &client.sin_addr.s_addr, sIP, sizeof(sIP)), ntohs(client.sin_port));exit(0); // 子进程处理完成后退出} else if (pid > 0) { // 父进程close(cfd); // 父进程关闭与客户端通信的套接字} else {perror("fork error");close(cfd);}}close(lfd);return 0;
}

客户端:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>#define PORT 8888
#define BUFFER_SIZE 1024
#define SERVER_IP "127.0.0.1"int main() {int sock = 0, valread;struct sockaddr_in serv_addr;char buffer[BUFFER_SIZE] = {0};char input_buffer[BUFFER_SIZE] = {0};char *hello = "Hello from client";int opt = 1;// 创建 TCP 套接字if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {perror("socket creation failed");return -1;}// 设置服务器地址结构serv_addr.sin_family = AF_INET;serv_addr.sin_port = htons(PORT);// 将 IPv4 地址从文本转换为二进制形式if (inet_pton(AF_INET, SERVER_IP, &serv_addr.sin_addr) <= 0) {perror("Invalid address/ Address not supported");return -1;}// 连接服务器if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {perror("Connection Failed");return -1;}printf("Connected to server\n");// 循环发送消息并接收响应while (1) {printf("Enter message to send (or 'exit' to quit): ");fgets(input_buffer, BUFFER_SIZE, stdin);// 去掉输入的换行符input_buffer[strcspn(input_buffer, "\n")] = 0;// 如果输入是 'exit',则退出循环if (strcmp(input_buffer, "exit") == 0) {break;}// 发送消息给服务器send(sock, input_buffer, strlen(input_buffer), 0);printf("Message sent to server: %s\n", input_buffer);// 接收服务器的响应valread = read(sock, buffer, BUFFER_SIZE);printf("Server response: %s\n", buffer);memset(buffer, 0, sizeof(buffer));}close(sock);return 0;
}

http://www.khdw.cn/news/7317.html

相关文章:

  • 菏泽注册公司流程和费用做优化关键词
  • 软件app开发需要多少钱seo内容优化是什么意思
  • 企业网站怎么做外链网站排名top排行榜
  • 做哪个网站的人多怎么样优化关键词排名
  • 温州网站优化seo优化软件哪个好
  • 上海opencart网站建设全网推广外包公司
  • 电子工程类包括网络工程吗汉中网站seo
  • 江苏初中课程基地建设网站站长工具seo推广
  • 国安中建建设集团网站全网推广代理
  • 做网站价格 网络推广托管服务个人网页设计制作网站模板
  • 成都个人学做网站百度怎么做推广
  • 广州网站建设系统开发企业培训考试平台官网
  • 服装定制属于什么行业南京百度seo
  • 济南济阳哪有做网站的济南网络优化哪家专业
  • 做网站的成本是什么学网络与新媒体后悔死了
  • 电影网站模板下载seo中文含义
  • 宁波网络推广方案公司推荐青岛网站seo推广
  • 能够做代理的网站有哪些易观数据
  • 五莲县网站建设沈阳网站seo公司
  • 网站设计第一步怎么做关键词有哪些?
  • 网站页面设计说明书徐州百度快照优化
  • 蒙古文政府网站群建设资料松原新闻头条
  • 响应式网页模版关键词排名优化公司成都
  • 织梦网站支付安装seo优化教程
  • 天长做网站seo优化
  • php站点搭建常见的网络营销方法
  • 常用网站有哪些网上卖货的平台有哪些
  • 展厅装修设计公司有seo渠道
  • asp.net jsp 网站开发抖音seo源码搭建
  • 自然村 网站建设网站建设方案设计书