C语言并发服务器

  • i4_253441
    了解作者
  • 2.1KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-04-17 07:22
    上传日期
C语言并发服务器,包括客户端和服务器端。
C语言并发服务器.rar
  • client.c
    1.6KB
  • server.c
    2.8KB
内容介绍
#include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <netinet/in.h> #include <arpa/inet.h rel='nofollow' onclick='return false;'> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <strings.h> #include <string.h> #define PORT 1234 //定义端口号 #define BACKLOG 2 #define MAXCHARSIZE 100 //允许最大连接的数量及缓冲区大小 void process_client(int connectfd,struct sockaddr_in client); int main(void) { int listenfd,connectfd; struct sockaddr_in server,client; int sin_size; int opt=SO_REUSEADDR; //设置套接字选项为SO_REUSEADDR pid_t pid; if((listenfd=socket(AF_INET,SOCK_STREAM,0))==-1) { perror("Create socket failed"); exit(0); }//初始化地址结构 setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt)); bzero(&server,sizeof(server)); server.sin_family=AF_INET; server.sin_port=htons(PORT); server.sin_addr.s_addr=htonl(INADDR_ANY);//绑定地址 if(bind(listenfd,(struct sockaddr*)&server,sizeof(struct sockaddr))==-1) { perror("Bind error"); exit(0); //调用bind函数,将套接字绑定到相应的地址 } if(listen(listenfd,BACKLOG)==-1) { perror("listen error"); exit(-1); //监听网络连接 } sin_size=sizeof(struct sockaddr_in); while(1) { if((connectfd=accept(listenfd,(struct sockaddr *)&client,&sin_size))==-1) { perror("Accept error"); exit(-1); } //接受客户端的连接请求 if((pid=fork())>0){ close(connectfd); continue; } else if(pid==0){ close(listenfd); process_client(connectfd,client); exit(1); } //若连接成功,则产生子进程。父进程关闭已连接描述符,继续接受下个客户的连接请求 else{ perror("Fork error.\n"); exit(0); //如果子进程产生失败,现实出错信息并退出程序 } } close(listenfd); //服务器退出时关闭监听描述符 } void process_client(int connectfd,struct sockaddr_in client){ char recvbuf[MAXCHARSIZE]; char sendbuf[MAXCHARSIZE]; char client_name[MAXCHARSIZE]; int recvlen,i; printf("You get a connection from %s\n",inet_ntoa(client.sin_addr)); send(connectfd,"Welcome to my server.\n",22,0); recvlen=recv(connectfd,client_name,MAXCHARSIZE,0); if(recvlen==0){ close(connectfd); printf("Client disconnected.\n"); return; } else if(recvlen<0){ close(connectfd); printf("Client broked.\n"); return; } client_name[recvlen]='\0'; printf("Client name is %s.\n",client_name); //接受客户的名字并显示 while(recvlen=recv(connectfd,recvbuf,MAXCHARSIZE,0)){ recvbuf[recvlen]='\0'; printf("Receive from client<%s> message:%s\n",client_name,recvbuf); for(i=0;i<recvlen;i++) sendbuf[i]=recvbuf[recvlen -i -1]; sendbuf[recvlen]='\0'; send(connectfd,sendbuf,strlen(sendbuf),0); } printf("Client:%s disconnected.\n,client_name");//重复接受客户的数据,接收成功则显示 close(connectfd); //关闭已连接描述符 }
评论
    相关推荐
    • RTSP 服务器C语言
      RTSP是实时流媒体传输协议,服务器和客户端之间通过RTSP协议实现握手和认证过程,通过RTP协议传输视频数据包,本资源通过C语言实现了RTSP服务器的功能。
    • 最新仙镜传说服务器c语言源码
      最新的仙镜传说服务器C语言源码,这是日本最新在布的,数据库类型为文件型数据库。 这个源码相当的完整,只要编译一次后就可以运行了,但得用到客户端的两个文件一个是data.grf另一个是sdata.grf,大家都可以试试!...
    • 守护进程时间服务器C语言实现.rar
      守护进程时间服务器C语言实现,适合编程小白
    • 最新仙镜传说服务器C语言源码
      最新的仙镜传说服务器C语言源码,这是日本最新在布的,数据库类型为文件型数据库。 这个源码相当的完整,只要编译一次后就可以运行了,但得用到客户端的两个文件一个是data.grf另一个是sdata.grf,大家都可以试试!
    • RTSP服务器C语言
      hi3516A输出h264码流,rtsp服务器完成推流,环形缓冲,异步监测。
    • http代理服务器C语言
      以前上TCP/IP课程时做的课程设计,很小的一个HTTP代理服务器,基于socket编程。VC6.0环境的。原创程序。 那时候还是新手,程序很简陋,不过好歹能用。 学校学习相关课程的学生可以参考下,当个课程作业没问题,老手...
    • 最新仙镜传说服务器C语言源码
      最新的仙镜传说服务器C语言源码,这是日本最新在布的,数据库类型为文件型数据库。这个源码相当的完整,只要编译一次后就可以运行了,但得用到客户端的两个文件一个是data.grf另一个是sdata.grf,大家都可以试试!我...
    • 最新仙镜传说服务器C语言源码.zip
      最新仙镜传说服务器C语言源码.zip为游戏源代码,作为开发游戏的一个很好DEMO
    • web服务器 C语言
      一个用C语言编写的WEB服务器,用socket编程
    • GaussDB_100_1.0.1-DATABASE-REDHAT-64bit.tar.gz
      guassdb100在redhat上安装包,单机部署的包,安装步骤请看我的文中介绍,经过大量实验搭建总结出来的文档