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

素材网站上的元素是怎么做的最好的网站建设价格

素材网站上的元素是怎么做的,最好的网站建设价格,怎样建设网站是什么,做新媒体文的网站目录 多线程并发服务器模型服务器实现 select的TCP服务器模型服务器实现 select的TCP客户端实现 多线程并发服务器 模型 sfd socket(); bind(); listen(); while(1){newfd accept();pthread_create(&tid, NULL, do_cli_msg, [newfd, cin]集合);pthread_detach(tid); } …

目录

  • 多线程并发服务器
    • 模型
    • 服务器实现
  • select的TCP服务器
    • 模型
    • 服务器实现
  • select的TCP客户端
    • 实现

多线程并发服务器

模型

sfd = socket();
bind();
listen();
while(1){newfd = accept();pthread_create(&tid, NULL, do_cli_msg, [newfd, cin]集合);pthread_detach(tid);
}
close(sfd);void* do_cli_msg(void* arg){while(1){recv();send();    }close(newfd);
}

服务器实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <pthread.h>#define PORT 8080
#define IP "192.168.124.38"
#define MAX_CLIENTS 5
#define BUFFER_SIZE 1024void *handle_client(void *arg);
int server_fd, new_socket, valread;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
char buffer[BUFFER_SIZE] = {0};
fd_set readfds;int main() {// 创建socketif ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {perror("socket failed");exit(EXIT_FAILURE);}// 设置端口复用if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {perror("setsockopt");exit(EXIT_FAILURE);}address.sin_family = AF_INET;                                                                                       address.sin_addr.s_addr = IP;address.sin_port = htons(PORT);// 绑定if (bind(server_fd, (struct sockaddr *)&address, sizeof(address))<0) {perror("bind failed");exit(EXIT_FAILURE);}// 监听if (listen(server_fd, MAX_CLIENTS) < 0) {perror("listen");exit(EXIT_FAILURE);}printf("服务器端口:%d...\n", PORT);while (1) {// 接受新的连接请求if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0) {perror("accept");exit(EXIT_FAILURE);}// 为新连接创建线程pthread_t client_thread;if(pthread_create(&client_thread, NULL, handle_client, (void*) &new_socket) < 0){perror("create thread");exit(EXIT_FAILURE);}// 分离线程,防止资源泄漏pthread_detach(client_thread);}return 0;
}void* handle_client(void* arg){int sock = *((int*)arg);char client_message[BUFFER_SIZE];while(1) {memset(client_message, 0, sizeof(client_message));valread = read(sock , client_message, BUFFER_SIZE);if(valread <= 0){// 发生错误或客户端关闭连接break;}printf("Client %d says: %s\n", sock, client_message);// 处理客户端消息并准备响应char *response = "服务器已就绪\n";send(sock , response , strlen(response) , 0 );}close(sock);printf("关闭socket: %d\n", sock);pthread_exit(NULL);}

select的TCP服务器

模型

sfd = socket();
bind();
listen();
while(1){tempfds = readfds;select(maxfd+1, &tempfds, NULL, NULL, NULL);for(int i=0; i<=maxfd; i++){if(FD_ISSET(i, &temfds) == 0)     continue;if(0 == i){                    }          else if(sfd == i){newfd=accept()FD_SET(newfd, &readfds);maxfd=newfd>maxfd?newfd:maxfd;        }   else{res=recv(i,  );if(0 == res){FD_CLR(i, &readfds);close(i);while(FD_ISSET(maxfd, &readfds)==0 && maxfd-->0);            }send(i,  );        }           }
}
close(sfd);

服务器实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/select.h>#define PORT 12345 int main() {int listenfd, newfd, maxfd, i, j, nbytes;struct sockaddr_in server_addr, client_addr;socklen_t addrlen;char buffer[1024];fd_set master_set, read_fds;if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {perror("socket");exit(1);}server_addr.sin_family = AF_INET;server_addr.sin_port = htons(PORT);server_addr.sin_addr.s_addr = 192.168.124.38;memset(&(server_addr.sin_zero), '\0', 8);if (bind(listenfd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1) {perror("bind");close(listenfd);exit(1);}if (listen(listenfd, 10 ) == -1) {perror("listen");close(listenfd);exit(1);}FD_ZERO(&master_set);FD_ZERO(&read_fds);FD_SET(listenfd, &master_set);maxfd = listenfd;while (1) {read_fds = master_set;if (select(maxfd + 1, &read_fds, NULL, NULL, NULL) == -1) {perror("select");exit(1);}for (i = 0; i <= maxfd; i++) {if (FD_ISSET(i, &read_fds)) {if (i == listenfd) {addrlen = sizeof(client_addr);if ((newfd = accept(listenfd, (struct sockaddr *)&client_addr, &addrlen)) == -1) {perror("accept");} else {FD_SET(newfd, &master_set);if (newfd > maxfd) {maxfd = newfd;}printf("New connection from %s on socket %d\n", inet_ntoa(client_addr.sin_addr), newfd);}} else {if ((nbytes = recv(i, buffer, sizeof(buffer), 0)) <= 0) {if (nbytes == 0) {printf("Socket %d hung up\n", i);} else {perror("recv");}close(i);FD_CLR(i, &master_set);} else {for (j = 0; j < nbytes; j += 0) {int sent = send(i, buffer + j, nbytes - j, 0);if (sent == -1) {perror("send");close(i);FD_CLR(i, &master_set);break;}j += sent;}}}}}}close(listenfd);return 0;
}

select的TCP客户端

实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/select.h>#define SERVER_IP "127.0.0.1"  // 服务器 IP 地址
#define SERVER_PORT 12345      // 服务器端口int main() {int sockfd, maxfd, nbytes;struct sockaddr_in server_addr;fd_set read_fds;char buffer[1024];if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {perror("socket");exit(1);}server_addr.sin_family = AF_INET;server_addr.sin_port = htons(SERVER_PORT);server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);memset(&(server_addr.sin_zero), '\0', 8);if (connect(sockfd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1) {perror("connect");exit(1);}printf("Connected to server on socket %d\n", sockfd);while (1) {FD_ZERO(&read_fds);FD_SET(sockfd, &read_fds);FD_SET(STDIN_FILENO, &read_fds);maxfd = (sockfd > STDIN_FILENO ? sockfd : STDIN_FILENO) + 1;if (select(maxfd, &read_fds, NULL, NULL, NULL) == -1) {perror("select");exit(1);}if (FD_ISSET(STDIN_FILENO, &read_fds)) {if (fgets(buffer, sizeof(buffer), stdin) == NULL) {break;}nbytes = strlen(buffer);if (send(sockfd, buffer, nbytes, 0) == -1) {perror("send");exit(1);}}if (FD_ISSET(sockfd, &read_fds)) {if ((nbytes = recv(sockfd, buffer, sizeof(buffer), 0)) <= 0) {if (nbytes == 0) {printf("Server hung up\n");} else {perror("recv");}break;} else {printf("Received from server: %.*s", nbytes, buffer);}}}close(sockfd);return 0;
}
http://www.yayakq.cn/news/188722/

相关文章:

  • 做百度网站每年的费用多少合适免费做网站哪里有
  • 网站架设标准买域名的网站
  • 酒类网站建什么是网络推广工作
  • 竞价网站做推广做网站用虚拟主机怎么样
  • 做企业网站所要注意什么东莞整合网站建设
  • 上海建设牌电动三轮官方网站天津正规制作网站公司
  • 网站管理员后台做电影网站会违法吗
  • 山东省建设文化传媒有限公司网站优化seo方法
  • 如何免费制作企业网站做聚美优品网站得多少钱
  • 个人可以做电影网站吗公司设计一个网站
  • 吴江建网站wordpress中文版本
  • 商城建网站关键词工具有哪些
  • 外贸seo网站推广公司群晖wordpress端口
  • 西宁做网站_君博相约做菠菜网站判多久
  • 襄阳做网站公司哪家好网站seo综合查询
  • 一元云够网站建设网架有限公司
  • 廊坊市做网站的公司有哪些长沙模板建站欢迎咨询
  • 河北网站备案查询系统淘宝详情页做的比较好的网站
  • 自己可以建立网站吗域名购买是什么意思
  • 建设个人购物网站文案撰写网站
  • 合肥建站公司哪周口学做网站
  • 蒙牛网站建设报价情况微商引流被加方法精准客源
  • 泰安网站销售公司创建一个自己的公司的英文
  • 网站常用插件网页游戏代理加盟
  • 蒙文网站建设情况汇报材料办公网络建设项目商务要求
  • 益阳网站制作公司地址建设网站的服务费是指什么意思
  • 如何做一个自己的网站华为网络工程师认证
  • 电影网站建设需要什么软件做原型的素材网站
  • 襄阳网站建设feeyr创办网站
  • 网站下载app免费深圳建设网站商