您的位置:首页 > 健康 > 美食 > 产品推广文案怎么写_响应式网站源码下载_活动策划_冯耀宗seo视频教程

产品推广文案怎么写_响应式网站源码下载_活动策划_冯耀宗seo视频教程

2025/1/7 9:20:06 来源:https://blog.csdn.net/sbhsjjs/article/details/144812165  浏览:    关键词:产品推广文案怎么写_响应式网站源码下载_活动策划_冯耀宗seo视频教程
产品推广文案怎么写_响应式网站源码下载_活动策划_冯耀宗seo视频教程

多进程程实现TCP并发服务器

#include<myhead.h>
#define IP "192.168.27.227"
#define PORT 8888
#define handel_err(res,val) if(val==-1){perror(res);return-1;}
void handel(int n){
if(n==SIGCHLD){while(waitpid(-1,NULL,WNOHANG)>0);
}
}
int main(int argc, const char *argv[])
{//收尸if(signal(SIGCHLD,handel)==SIG_ERR){perror("signal");}//套接字int sfd=socket(AF_INET,SOCK_STREAM,0);handel_err("socket",sfd);//绑定struct sockaddr_in server={.sin_family=AF_INET,.sin_port=htons(PORT),.sin_addr.s_addr=inet_addr(IP)};int res=bind(sfd,(struct sockaddr *)&server,sizeof(server));handel_err("bind",res);//监听res = listen(sfd,10);handel_err("listen",res);struct sockaddr_in client;socklen_t addrlen=sizeof(client);while(1){int cfd=accept(sfd,(struct sockaddr *)&client,&addrlen);handel_err("accept",res);char buf[1024];//创建线程int pid = fork();if(pid>0){//关闭cfdclose(cfd);}else if(pid == 0){//关闭sfdclose(sfd);char buf[1024]="";while(1){bzero(buf,sizeof(buf));int res=recv(cfd,buf,sizeof(buf),0);if(res==0||res==-1){printf("下线\n");close(cfd);break;}printf("-->%s\n",buf);send(cfd,"ok\n",sizeof("ok\n"),0);}//退出子exit(EXIT_SUCCESS);}}close(sfd);return 0;
}

循环服务器

#include<myhead.h>
#define handel_err(res,val) if(val==-1){perror(res);return-1;}
int res;
#define PORT 8888
#define IP "192.168.27.227"
int main(int argc, const char *argv[])
{int sfd=socket(AF_INET,SOCK_STREAM,0);handel_err("socket",sfd);//快速复用/*int k=1;res=setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&k,sizeof(k));
*///绑定struct sockaddr_in server={.sin_family=AF_INET,.sin_port=htons(PORT),.sin_addr.s_addr=inet_addr(IP)};res=bind(sfd,(struct sockaddr *)&server,sizeof(server));handel_err("bing",res);//监听res=listen(sfd,10);handel_err("listen",res);int cfd;struct sockaddr_in client;socklen_t client_len;while(1){cfd=accept(sfd,(struct sockaddr*)&client,&client_len);handel_err("accept",cfd);char buf[1024];while(1){bzero(buf,sizeof(buf));res=recv(cfd,buf,sizeof(buf),0);if(res==0){printf("x\n");close(cfd);break;}printf("-->%s\n",buf);send(cfd,"ok\n",sizeof("ok\n"),0);}}close(sfd);return 0;
}

多线程服务器

#include<myhead.h>
#define SER_PORT 6666          //服务器端口号
#define SER_IP "192.168.0.136"    //服务器ip地址struct MsgInfo
{int newfd;       //套接字文件描述符struct sockaddr_in cin;        //客户端地址信息结构体
};void *deal_cli_msg(void *arg)
{int newfd = (*(struct MsgInfo*)arg).newfd;struct sockaddr_in cin = (*(struct MsgInfo*)arg).cin;char buf[128] = "";while(1){//清空容器bzero(buf, sizeof(buf));//从客户端套接字中读取数据int res = recv(newfd, buf, sizeof(buf), 0);if(res == -1){perror("read error");return NULL;}else if(res == 0){printf("客户端已经下线\n");close(newfd);             //关闭客户端套接字break;}//正常收到客户端发来的消息printf("[%s:%d] : %s\n", inet_ntoa(cin.sin_addr), ntohs(cin.sin_port), buf);//将消息回复给客户端if(send(newfd, buf, strlen(buf), 0) == -1){perror("发送error");return NULL;}printf("发送成功\n");}//退出线程pthread_exit(NULL);}int main(int argc, const char *argv[])
{int sfd = socket(AF_INET, SOCK_STREAM, 0);if(sfd == -1){perror("socket error");return -1;}int reuse = 1;if(setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse))==-1){perror("setsockopt error");return -1;}struct sockaddr_in sin;       sin.sin_family = AF_INET;       //通信域sin.sin_port = htons(SER_PORT);    //端口号sin.sin_addr.s_addr = inet_addr(SER_IP);    //ip地址if(bind(sfd, (struct sockaddr*)&sin, sizeof(sin)) == -1){perror("bind error");return -1;}printf("bind success\n");if(listen(sfd, 128)==-1){perror("listen error");return -1;}printf("listen success\n");struct sockaddr_in cin;          //用于接收地址信息socklen_t addrlen = sizeof(cin);  //用于接收长度while(1){int newfd = accept(sfd, (struct sockaddr*)&cin, &addrlen) ;if(newfd == -1){perror("accept error");return -1;}printf("[%s:%d:%d]: 已成功连接一个客户端\n", \inet_ntoa(cin.sin_addr), ntohs(cin.sin_port), newfd);struct MsgInfo buf = {newfd, cin};pthread_t tid = -1;if(pthread_create(&tid, NULL, deal_cli_msg, &buf) != 0){printf("pthread_create error\n");return -1;}pthread_detach(tid);            //将线程设置成分离态}close(sfd);return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com