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

📄 example71.c

📁 LinuxNetProgramming Linux网络编程基础实例
💻 C
字号:
/* example71.c */

#include	<sys/types.h>

#include	<sys/socket.h>

#include	<netinet/in.h>

#include	<stdio.h>

#define		MAXLEN	1024

#define		SERV_PORT	8080

#define		BACKLOG		5



void serv();

int

main()

{

	int		listenfd, connetfd;

	pid_t		childpid;

	socklen_t	clilen;

	struct sockaddr_in cliaddr, servaddr;

	if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {

		perror("socket error");

		exit(0);

	}

	bzero(&servaddr, sizeof(servaddr));

	servaddr.sin_family = AF_INET;

	servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

	servaddr.sin_port = htons(SERV_PORT);

	if ((bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr))) < 0) {

		perror("bind error");

		exit(0);

	}

	if (listen(listenfd, BACKLOG) < 0) {

		perror("listen error");

		exit(0);

	}

	for ( ; ; ) {

		clilen = sizeof(cliaddr);

		connetfd = accept(listenfd, (struct sockaddr *)&cliaddr, &clilen);

		if ((childpid = fork()) == 0) {

			close(listenfd);

			serv(connetfd);

			exit(0);

		}

		close(connetfd);

	}

}

void

serv(int connfd)

{

	ssize_t	n;

	char	line[MAXLEN];

	for ( ; ; ) {

		if ((n = read(connfd, line, MAXLEN)) == 0) {

			perror("connect closed by client");

			exit(0);

		}

		if (line[0] == '1') {

			sleep(3);

			write(connfd, "server respons to client1", 26);

		}

		else

			write(connfd, "server respons to client2", 26);

	}

}

⌨️ 快捷键说明

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