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

做访问的公司网站南京疫情最新情况

做访问的公司网站,南京疫情最新情况,新网站如何做网站优化,网站关键词策略下面是基于I/O复用的回声服务器端和客户端代码 1.Linux系统 服务器端代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> // POSIX标准定义的通用函数&#xff0c;如close() #include <arpa/inet.h> //…

下面是基于I/O复用的回声服务器端和客户端代码

1.Linux系统

服务器端代码

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <unistd.h> // POSIX标准定义的通用函数,如close()
#include <arpa/inet.h> // 提供inet相关的函数,如inet_addr()
#include <sys/socket.h> // 提供socket相关的函数和数据结构
#include <signal.h>
#include <sys/wait.h>#define BUFF_SIZE 100 //缓冲区大小
void error_handling(char* message);int main(int argc, char *argv[]) 
{int serv_sock; // 服务器套接字int clnt_sock; // 客户端套接字struct sockaddr_in serv_addr; // 服务器地址结构struct sockaddr_in clnt_addr; // 客户端地址结构struct timeval timeout;//超时设置fd_set reads,cpy_reads;//读集合,拷贝读集合socklen_t clnt_addr_size; // 客户端地址结构的大小int fd_max,str_len,fd_num,i;//最大文件描述符,读集合大小,读集合大小,循环次数char opinfor[BUFF_SIZE];if(argc!=2){printf("Usage : %s <port>\n", argv[0]);exit(1); }// 创建一个服务器套接字serv_sock=socket(PF_INET, SOCK_STREAM, 0);//使用SOCK_STREAM创建TCP套接字if(serv_sock==-1) error_handling("socket() error"); // 初始化服务器地址结构memset(&serv_addr, 0, sizeof(serv_addr));serv_addr.sin_family=AF_INET; // 地址族设置为IPv4serv_addr.sin_addr.s_addr=htonl(INADDR_ANY); // 服务器地址设置为任意serv_addr.sin_port=htons(atoi(argv[1])); // 设置监听端口为命令行参数指定的端口// 绑定套接字,调用bind()函数分配ip地址和端口号if(bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr))==-1)error_handling("bind() error"); // 监听套接字,最多监听5个连接if(listen(serv_sock, 5)==-1) error_handling("listen() error");//设置文件描述符FD_ZERO(&reads);FD_SET(serv_sock, &reads);fd_max=serv_sock;while(1){cpy_reads=reads;//把fd_set复制到cpy_reads//设置超时timeout.tv_sec=5;timeout.tv_usec=5000;if((fd_num=select(fd_max+1,&cpy_reads,0,0,&timeout))==-1){//调用select()函数,如果有文件描述符就绪,返回就绪的文件描述符个数,错误返回-1break;}if(fd_num==0){//超时返回0continue;}for(i=0; i<=fd_max+1; i++){//遍历所有文件描述符if(FD_ISSET(i, &cpy_reads)){//判断是否在cpy_reads中if(i==serv_sock){clnt_addr_size=sizeof(clnt_addr);clnt_sock=accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);//接受连接请求FD_SET(clnt_sock, &reads);//将新连接的客户端套接字加入到reads中//更新最大文件描述符if(fd_max<clnt_sock){fd_max=clnt_sock;printf("Connected client: %d\n", clnt_sock);}}else{str_len=read(i, opinfor, BUFF_SIZE);//读取客户端发送的数据if(str_len==0){//如果客户端关闭连接FD_CLR(i, &reads);//从reads中删除该文件描述符close(i);printf("closed client: %d\n", i);}else{write(i, opinfor, str_len);//发送数据给客户端}}}}}// 关闭服务器套接字close(serv_sock);return 0; 
}void error_handling(char *message)
{fputs(message, stderr); fputc('\n', stderr); exit(1); 
}

客户端代码
这里使用的是(第四章)基于TCP的服务器端/客户端(1)中的回声服务器客户端代码

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <unistd.h> 
#include <arpa/inet.h> 
#include <sys/socket.h> #define BUF_SIZE 1024
void error_handling(char *message); int main(int argc, char *argv[]) 
{int sock; // 客户端套接字struct sockaddr_in serv_addr; // 服务器地址结构char message[BUF_SIZE]; // 用于存储从服务器接收的消息int str_len,i; // 读取的字节数if (argc != 3){printf("Usage : %s <IP> <port>\n", argv[0]);exit(1); }// 创建一个客户端套接字sock = socket(PF_INET, SOCK_STREAM, 0);if (sock == -1) error_handling("socket() error"); // 初始化服务器地址结构memset(&serv_addr, 0, sizeof(serv_addr));serv_addr.sin_family = AF_INET; // 地址族设置为IPv4serv_addr.sin_addr.s_addr = inet_addr(argv[1]); // 设置服务器IP地址serv_addr.sin_port = htons(atoi(argv[2])); // 设置服务器端口号// 发送连接请求if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) == -1)error_handling("connect() error"); else{printf("Connected.....\n");}while(1){printf("Input message(Q to quit): ");fgets(message, BUF_SIZE, stdin);if (!strcmp(message, "Q\n") || !strcmp(message, "q\n")){break;}write(sock, message, strlen(message));str_len = read(sock, message, sizeof(message) - 1);message[str_len] = 0;printf("Message from server: %s \n", message);}// 关闭套接字close(sock);return 0; 
}void error_handling(char* message){fputs(message, stderr); fputc('\n', stderr); exit(1); 
}

运行结果
在这里插入图片描述
回声服务器/客户端可以正常运行,也可以单独关闭某一个客户端的连接

2.Windows系统

Windows系统下的select函数和Linux系统下的完全相同,详情查看(第十二章)I/O复用(1)

服务器端代码

#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")// 指定链接到winsock库#define BUFF_SIZE 30 //缓冲区大小
void error_handling(char* message);int main(int argc, const char* argv[])
{WSADATA wsaData;// Windows Sockets API需要的数据结构SOCKET hServSock, hClntSock;SOCKADDR_IN servAddr, clntAddr;TIMEVAL timeout;fd_set reads,cpy_reads;char message[BUFF_SIZE];int strlen,clntAdrSize,fdNum,i;if (argc != 2) {printf("Usage : %s <port>\n", argv[0]);exit(1);}if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)// 初始化Windows Sockets服务error_handling("WSAStartup() error!");//创建套接字	hServSock = socket(PF_INET, SOCK_STREAM, 0);//使用SOCK_STREAM,即创建tcp套接字if (hServSock == INVALID_SOCKET)error_handling("socket() error");memset(&servAddr, 0, sizeof(servAddr));servAddr.sin_family = AF_INET;servAddr.sin_addr.s_addr = htonl(INADDR_ANY); servAddr.sin_port = htons(atoi(argv[1]));// 将socket绑定到地址和端口if (bind(hServSock, (SOCKADDR*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR)error_handling("bind() error");if (listen(hServSock, 5) == SOCKET_ERROR)error_handling("listen() error");//设置文件描述符集合FD_ZERO(&reads);FD_SET(hServSock, &reads);while (1) {cpy_reads = reads;//将reads复制到cpy_readstimeout.tv_sec = 5;//设置超时时间timeout.tv_usec = 5000;//等待文件描述符集合中的描述符就绪fdNum = select(0, &cpy_reads, NULL, NULL, &timeout);if (fdNum == SOCKET_ERROR){//有错误退出break;}if(fdNum == 0){//超时continue;}for (i = 0; i < fdNum; i++){//遍历所有文件描述符if (FD_ISSET(cpy_reads.fd_array[i], &reads)){//判断是否在cpy_reads中if (cpy_reads.fd_array[i] == hServSock){//有新的客户端连接clntAdrSize = sizeof(clntAddr);hClntSock = accept(hServSock, (SOCKADDR*)&clntAddr, &clntAdrSize);//接受客户端连接if (hClntSock == INVALID_SOCKET){error_handling("accept() error");}else{printf("connected client: %d \n",hClntSock);FD_SET(hClntSock, &reads);//将新的客户端socket添加到文件描述符集合中}	}else{//有客户端发送数据strlen = recv(cpy_reads.fd_array[i], message, BUFF_SIZE, 0);//接收数据if (strlen == 0){//如果客户端关闭连接FD_CLR(cpy_reads.fd_array[i], &reads);//从文件描述符集合中删除closesocket(cpy_reads.fd_array[i]);printf("closed client: %d\n",cpy_reads.fd_array[i]);}else{//发送数据send(cpy_reads.fd_array[i],message, strlen, 0);printf("message from client %d : %s", hClntSock,message);}}}}}closesocket(hServSock);// 关闭服务器socketWSACleanup();// 清理Windows Sockets服务return 0;
}void error_handling(char* message)
{fputs(message, stderr);fputc('\n', stderr);exit(1);
}

客户端代码
这里使用的是(第四章)基于TCP的服务器端/客户端(1)中的回声服务器客户端代码

#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")// 指定链接到winsock库#define BUF_SIZE 1024
void ErrorHandling(const char *message);int main(int argc, char *argv[])
{WSADATA wsaData;SOCKET hSocket;SOCKADDR_IN servAddr;// 用于存储服务器的地址信息char message[BUF_SIZE];// 用于接收从服务器发送的消息int strLen;// 接收的消息长度if (argc != 3) {printf("Usage : %s <IP> <port>\n", argv[0]);exit(1);}// 初始化Windows Sockets服务if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)ErrorHandling("WSAStartup() error!");//创建套接字hSocket = socket(PF_INET, SOCK_STREAM, 0);if (hSocket == INVALID_SOCKET)ErrorHandling("socket() error");memset(&servAddr, 0, sizeof(servAddr));servAddr.sin_family = AF_INET;// 设置地址族为IPv4servAddr.sin_addr.s_addr = inet_addr(argv[1]);// 设置服务器的IP地址servAddr.sin_port = htons(atoi(argv[2]));// 设置服务器的端口号// 尝试连接到服务器if (connect(hSocket, (SOCKADDR*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR)ErrorHandling("connect() error!");else{printf("Connected......\n");}while(1){fputs("Input message(Q to quit): ",stdout);fgets(message, BUF_SIZE, stdin);if(!strcmp(message, "Q\n") || !strcmp(message, "q\n")){break;}send(hSocket, message, strlen(message), 0);strLen= recv(hSocket, message, sizeof(message)-1, 0);message[strLen]= 0;printf("Message from server: %s \n", message);}closesocket(hSocket);// 关闭套接字WSACleanup();// 清理Windows Sockets服务return 0;
}void ErrorHandling(const char *message)
{fputs(message, stderr);fputc('\n', stderr);exit(1);
}

运行结果
在这里插入图片描述

http://www.dt0577.cn/news/33020.html

相关文章:

  • 个人网站备案信息填写今日百度小说排行榜风云榜
  • 叙述网站制作的流程产品优化是什么意思
  • by68777免费域名查询关键词优化公司哪家强
  • 专业做网站+上海网络营销案例分析题及答案
  • 把自己做的网站开放到外网推广计划
  • b2c电子商务网站制作网络推广比较经典和常用的方法有
  • 平面设计师磨刀石品牌关键词排名优化怎么做
  • 北辰网站开发百度搜索网页版入口
  • 怎样找别人制作网站百度开户是什么意思
  • 专业的网站建设公司排名夫唯老师seo
  • 适合夜里看的php萌新seo
  • 建设网站及域名费用东莞网络优化调查公司
  • dx网站是哪家公司做的天津seo网站管理
  • 做网站要备案公司建网站需要多少钱
  • 天津政府建设工程信息网站站长网站提交
  • 网页设计的网站配色方案怎么样引流顾客到店方法
  • wordpress获取自定义文章分类名seo公司网站推广
  • 营销类网站有哪些我为什么不建议年轻人做运营
  • wordpress 添加图片水印太原seo自媒体
  • 中国做铁塔的公司网站怎样淘宝seo排名优化
  • 做美食视频网站有哪些百度推广入口官网
  • 公司做网站的流程作图的步骤常州网络推广哪家好
  • 用二级域名做的网站算新站吗代写文案的软件
  • 福建中国建设工程造价管理协会网站微博营销成功案例8个
  • 桐城市住房城乡建设局网站推广发布任务平台app下载
  • wordpress资讯主题seo研究中心晴天
  • 北京建设银行网站首页郑州seo外包v1
  • 论坛类网站设计外链生成工具
  • 网站常用颜色李江seo
  • 科技公司网站设计欣赏北京网站制作推广