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

📄 mutiserver.c

📁 这个是linux下
💻 C
字号:
#include <stdio.h>
#include <stdlib.h> 
#include <unistd.h>
#include <strings.h>
#include <sys/types.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <netdb.h>
#include <sys/wait.h>
       
#define  PORT	1234
#define  BACKLOG	10
#define MAXDATASIZE	1000
void process_cli(int connectfd, struct sockaddr_in client);
int main(void)
{
	int 	listenfd, connectfd;
	pid_t	pid;
	struct sockaddr_in	server, client;
	int 	sin_size;
	
	/* Create TCP Socket */
  if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)  {
		perror("Create socket failed.");
		exit(0);
 }
if((listenfd=socket(AF_INET, SOCK_STREAM, 0))==-1)
        {
                perror("Create socket failed");
                exit(0);
        }
int opt = SO_REUSEADDR;
setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));

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

if (bind(listenfd, (struct sockaddr *)&server, sizeof(struct sockaddr))==-1)
           {
                perror("Bind error");
                exit(0);
        }

if (listen(listenfd, BACKLOG) ==-1) {
                perror("listen error");
                exit(0);
        }


sin_size = sizeof(struct sockaddr_in);

while(1) {

             if((connectfd = accept(listenfd, (struct sockaddr *)&client, &sin_size)) == -1) {
                        perror("accept error");
                        exit(0);
                }
if ((pid=fork())>0) {
	   /* parent process */
	   close(connectfd);
	   continue;
	   }
else if (pid==0) {
	   /*child process*/
	   close(listenfd);
	   process_cli(connectfd, client);
	   exit(0);     
	   }
else {
	   printf("fork error\n");
	   exit(0);
	 }
	}/*while()*/
close(listenfd);   /* close listenfd */         
} 
void process_cli(int connectfd, struct sockaddr_in client) {
	int 	num;
	char	   recvbuf[MAXDATASIZE], sendbuf[MAXDATASIZE], cli_name[MAXDATASIZE];
	printf("you got a connection from %s.\n", inet_ntoa(client.sin_addr));
	num = recv(connectfd, cli_name, MAXDATASIZE, 0);
	if (num == 0) {
	close(connectfd);
	printf("client disconnected.\n");
	return;
	}
	cli_name[num] = '\0';
	printf("Client name is %s\n",cli_name);
         bzero(&recvbuf,sizeof(recvbuf));
while (num = recv(connectfd, recvbuf, MAXDATASIZE,0)) {
	recvbuf[num] = '\0';
	printf("received client (%s) message: %s\n", cli_name, recvbuf);
	int i=0;
		for(i=0; i < num ; i++)
			sendbuf[i] = recvbuf[num-i-1];
		sendbuf[i] = '\0';
		send(connectfd, sendbuf, strlen(sendbuf), 0);
	}
	close(connectfd);
}


⌨️ 快捷键说明

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