您的位置:首页 > 其它

并发服务器设计

2015-08-12 22:16 351 查看
并发服务器就是能够同时处理多个客户端请求的服务器。并发服务器可通过多进程或者多线程程序来实现,这里采用多进程程序。

服务器

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>/*定义了struct sockaddr_in*/
void main()
{
int sockfd;
/*创建socket*/
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd==-1)
{
printf("create socket false");
exit(1);
}
/*绑定地址*/
struct sockaddr_in server_addr;
server_addr.sin_family=AF_INET;
server_addr.sin_port=htons(5000);
server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
if(bind(sockfd,(const struct sockaddr *)(&server_addr),sizeof(server_addr))==-1)
{
printf("bind false");
exit(1);
}
/*监听端口*/
listen(sockfd,3);
/*父进程等待连接,成功连接后创建子进程收发数据*/
int newfd;
struct sockaddr_in client_addr;
int addrlen=sizeof(client_addr);
char buf[128];
pid_t pid;
while(1)
{
newfd=accept(sockfd,(struct sockaddr *)(&client_addr),&addrlen);
pid=fork();
if(pid==0)
{
while(1)
{
recv(newfd,buf,128,0);
printf("the message is from :%s\n",inet_ntoa(client_addr.sin_addr));
printf("the message received is %s\n",buf);
if(strcmp(buf,"exit")==0)
{
break;
}

}
close(newfd);
close(sockfd);
exit(0);
}
}
/*结束连接*/
close(newfd);
close(sockfd);
}


客户端

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>/*定义了struct sockaddr_in*/
void main()
{
/*创建socket*/
int sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd==-1)
{
printf("create socket false");
exit(1);
}
/*连接服务器*/
struct sockaddr_in server_addr;
server_addr.sin_family=AF_INET;
server_addr.sin_port=htons(5000);
server_addr.sin_addr.s_addr=inet_addr("192.168.137.246");
if(connect(sockfd,(const struct sockaddr *)(&server_addr),sizeof(server_addr))==-1)
{
printf("connect false");
exit(1);
}
/*收发数据*/
printf("please enter your message,and exit for exit\n");
char buf[128];
while(1)
{
scanf("%s",buf);
send(sockfd,buf,128,0);
if(strcmp(buf,"exit")==0)
break;
}
/*结束连接*/
close(sockfd);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: