TCP回射服务器程序:main函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP回射服务器程序:main函数相关的知识,希望对你有一定的参考价值。

TCP回射并发服务器

1.创建套接字,绑定服务器的众所周知端口

创建一个TCP套接字,在待绑定到该TCP套接字的网际网套接字地址结构中填入通配地址(INADDR_ANY)

和服务器的众所知周(SERV_PORT,在头文件中unp.h中其定义为9877)

绑定通配地址是在告知系统:

要是系统是多宿主机,我们将接受目的地地址为任何本地接口的连接

我们对TCP端口号的选择应该比1023大,比5000大,比49152小,而且不和任何注册的端口冲突

listen把该套接字地址转换成一个监听套接字

2.等待完成客户连接

服务器阻塞于accept调用,等待客户连接的完成

3.并发服务器

fork为每个客户派生一个处理它们的子进程

子进程关闭监听套接字,父进程关闭已连接套接字,子进程接着调用str_echo

 

#include	"unp.h"

int
main(int argc, char **argv)
{
	int					listenfd, connfd;
	pid_t				childpid;
	socklen_t			clilen;
	struct sockaddr_in	cliaddr, servaddr;

	listenfd = Socket(AF_INET, SOCK_STREAM, 0);

	bzero(&servaddr, sizeof(servaddr));
	servaddr.sin_family      = AF_INET;
	servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
	servaddr.sin_port        = htons(SERV_PORT);

	Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));

	Listen(listenfd, LISTENQ);

	for ( ; ; ) {
		clilen = sizeof(cliaddr);
		connfd = Accept(listenfd, (SA *) &cliaddr, &clilen);

		if ( (childpid = Fork()) == 0) {	/* child process */
			Close(listenfd);	/* close listening socket */
			str_echo(connfd);	/* process the request */
			exit(0);
		}
		Close(connfd);			/* parent closes connected socket */
	}
}

  

以上是关于TCP回射服务器程序:main函数的主要内容,如果未能解决你的问题,请参考以下文章

《UNIX网络编程 卷1:套接字联网API》学习笔记——TCP客户/服务器程序示例

TCP回射客户程序:str_cli函数

TCP回射服务器程序:str_echo函数

如何使用select函数的TCP和UDP回射服务器程序

第十篇:基于TCP的一对回射客户/服务器程序及其运行过程分析( 上 )

unp TCP 客户端服务器回射程序中对SIGCHLD信号的处理