Liunx网络编程---并发服务器

原创 2013年12月05日 15:04:00

网络程序里面,一般来说都是许多用户共同访问一个服务器,为了处理客户的需求,对服务器提出了特殊的要求,目前有两种;

      循环服务器:

           服务器在同一时刻只能处理一个客户请求

      并发服务器;

           服务器能在同一时刻能够处理多个用户的请求

网络服务器大多采用并发,并发服务器的原理就是专门制造一个子进程,由子进程负责处理客户端的请求,父进程继续等待新的客户请求。下面是将TCP循环服务器改进的并发服务器:

//TCP text,this is a TCP server
#include <stdio.h>
#include <errno.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

#define portnumber 4443

int main()
{
	struct sockaddr_in TCP_server,TCP_client;
	int socketfd,newfd;
	int tbyte;
	if((socketfd = socket(AF_INET,SOCK_STREAM,0)) == -1)	
	{
		fprintf(stderr,"Get socket error! %s \n",strerror(errno));
		exit(1);
	}
	printf("set up the socket,and sockfd is %d\n",socketfd);
	
	/*write the server address*/
	bzero(&TCP_server,sizeof(struct sockaddr_in));
	TCP_server.sin_family = AF_INET;
	TCP_server.sin_port = htons(portnumber);
	TCP_server.sin_addr.s_addr = htonl(INADDR_ANY);
	/*bind ip to socket*/
	if(bind(socketfd,(struct sockaddr *)(&TCP_server),sizeof(struct sockaddr)) == -1)
	{
		perror("Bind error:\n");
		exit(1);
	}
	if(listen(socketfd,5) == -1)
	{
		printf("set the max connect error!\n");
		exit(1); 
	}
	while(1)
	{
		bzero(&TCP_client,sizeof(struct sockaddr_in));
		tbyte = sizeof(struct sockaddr_in);	
		if((newfd = accept(socketfd,(struct sockaddr*)(&TCP_client),&tbyte)) == -1)
		{
			fprintf(stderr,"TCP connect failed: %s\n",strerror(errno));
			exit(1);
		}
		/*create a child progress to solve the telecommuncation*/
		if(fork() == 0)			//child progross
		{	
			char buffer[1024];		
			printf("Get message from: %s\n",inet_ntoa(TCP_client.sin_addr));
			if((tbyte = read(newfd,buffer,1024)) == -1)
			{
				printf("Get message error!\n");
				exit(1);
			}
			buffer[tbyte] = '\0';
			printf("%s\n",buffer);
			memset(buffer,'\0',1024);
			close(newfd);
			close(socketfd);
			exit(0);
		}else	//parents progress
		{
			close(newfd);
		}
	}
	return 0;
}
如上,改进后的TCP_server就可以同时处理多个客户的请求。

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

Windows下的网络编程(tcp循环并发服务器)

学了Windows下的网路编程,做了一个小例子试了下手,和Linux下的网路编程感觉总体上差不多,但是细节上,比如说函数的实现还是有些不同。总的结构和Linux差不多,如下图所示: 话不多说...

UNIX网络编程笔记(3):简单的并发服务器

上一讲中的简单时间获取服务器是一个迭代服务器,对于获取时间来说够用了。迭代服务器有这样的特点:同一时间只能给一个客户服务。也就是说,如果某一时刻服务器与某个客户正在连接,其它客户必须等到上一个客户与服...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

网络编程释疑之:单台服务器上的并发TCP连接数可以有多少

曾几何时我们还在寻求网络编程中C10K问题的解决方案,但是现在从硬件和操作系统支持来看单台服务器支持上万并发连接已经没有多少挑战性了。 我们先假设单台服务器最多只能支持万级并发连接,其实对绝大多数应...

UNIX网络编程——并发服务器(多线程)

并发服务器:       (1)多进程并发服务器:http://blog.csdn.net/songshimvp1/article/details/51819765        ...

【24】网络编程2_TCP并发上传图片和登录,Tomcat服务器,自定义IE,域名解析

练习一:客户端把图片上传到服务器,服务器返回信息 /* 需求:上传图片。 客户端。 1,服务端点。 2,读取客户端已有的图片数据。 3,通过socket 输出流将数据发给服务端。 4,读取服务端反...

【Linux网络编程】并发服务器的三种实现模型

服务器设计技术有很多,按使用的协议来分有 TCP 服务器和 UDP 服务器,按处理方式来分有循环服务器和并发服务器。 循环服务器与并发服务器模型 在网络程序里面,一般来说都是许多客户对...

Linux网络编程——tcp并发服务器(多进程)

一、tcp并发服务器概述 一个好的服务器,一般都是并发服务器(同一时刻可以响应多个客户端的请求)。并发服务器设计技术一般有:多进程服务器、多线程服务器、I/O复用服务器等。 二、多...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)