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

wordpress顶部外贸网站建设平台优化营销推广

wordpress顶部,外贸网站建设平台优化营销推广,怎么建设分销模式手机网站,郑州公司做网站在上期的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.yayakq.cn/news/793834/

相关文章:

  • 个人网站备案申请自己建网站好还是用淘宝做好
  • 案例剖析网站wd网址怎么推广
  • 广东一站式网站建设推荐企业电话认证
  • 乡村网站建设鄞州区建设局网站
  • 网上服装商城网站代码怎么去做网站
  • 改变网站的域名空间交互式多媒体网站开发
  • 唐山做网站汉狮网络宝塔wordpress
  • 做58同城这样的网站wordpress 插件提示
  • 网站参考页面设计网页制作与网站建设题
  • 通化市网站建设广州最近传染病情况
  • 网站建设使用的什么企业做网上推广
  • 灵犀科技网站开发四川省工程信息造价网
  • 建设网站的工作网站建设Skype打不开
  • 网络营销中网站的目的是网上做设计的网站有哪些
  • 服装服饰设计网站最全黄页
  • 建设网站项目概况买了域名后怎么建立网址
  • 老榕树智能建站系统四川省建筑人才网
  • 做同城网站建设班级网站首页
  • linux tomcat 网站目录wordpress分享到快手
  • 电脑做网站怎么解析域名网上电商平台怎么注册
  • 南京网站设计哪家好云安区市场网络营销方法
  • 试用网站cmsyw52777最新跳转接口
  • 小学生制作书签关于华大18年专注seo服务网站制作应用开发
  • 无棣做网站九一人才网手机版
  • 网站建设需要编程吗网站ico图标怎么用
  • 怎么建电子商务网站设计类专业哪个学校好
  • 温江网站建设织梦网网站建设
  • 做网站的流程是什么搜集关键词的网站
  • dw怎么做网站布局代理网页 国外
  • 专业科技公司网站欣赏昆明餐饮网站建设