⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 multitcpserver.c

📁 linux下的模拟网络并发服务器工作
💻 C
字号:
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/signal.h>
#include<sys/socket.h>
#include<sys/time.h>
#include<sys/resource.h>
#include<sys/wait.h>
#include<sys/errno.h>
#include<netinet/in.h>
#define DEFAULT_PORT 2345
#define MAX_QLEN 10
#define BUFSIZE 1024

void echoService(int sock);

int main(int argc,char* argv[])
{
	int m_sock,s_sock;
	struct sockaddr_in server;
	struct sockaddr_in client;
	int port;
	int qlen;
	int rval,length;
	switch(argc)
	{
	case 1:
		port=DEFUAULT_PORT;
		break;
	case 2:
		port=atoi(argv[1]);
		break;
	default:
		perror("usage:multiTcpServer[port]\n");
		exit(1);
	}
	qlen=MAX_QLEN;

	m_sock=socket(PF_INET,SOCK_STREAM,0);
	if(m_sock<0)
	{
		perror("can't create socket\n");
		exit(1);
	}

	server.sin_family=AF_INET;
	server.sin_addr.s_addr=INADDR_ANY;
	server.sin_port=htons(port);

	rval=bind(m_sock,(struct sockaddr *)&server,sizeof(server));
	if(rval<0)
	{
		perror("binding error\n");
		exit(1);
	}

	rval=listen(m_sock,qlen);
	if(rval<0)
	{
		perror("listening error\n");
		exit(1);
	}

	do
	{
		length=sizeof(struct sockaddr_in);
		s_sock=accept(m_sock,(struct sockaddr*)&client,&length);
		if(s_sock<0)
		{
			perror("accepting error\n");
			exit(0);
		}

		switch(fork())
		{
		case -1:
			perror("fork error!\n");
			exit(1);
		case 0:
			close(m_sock);
			echoService(s_sock);
			exit(0);
		default:
			close(s_sock);
		}
	}
	while(1);
}


void echoService(int sock)
{
	char buf[BUFSIZE];
	int rval;

	do
	{
		bzero(buf,sizeof(buf));
		rval= read(sock,buf,sizeof(buf));
		if(rval<0)
		{
			perror("reading error\n");
			exit(1);
		}

		if(strcmp(buf,"END")==0)
			return;
		else 
		{
			rval=write(sock,buf,strlen(buf));
			if(rval<0)
			{
				perror("writing error\n");
				exit(1);
			}
		}
	}
	while(1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -