关于linux中的socket网络编程并发服务器实现

1、什么是并发服务器?

        ‌并发服务器是指能够同时处理多个客户端业务的服务器‌。tcp通信是一对一进行有连接的方式,而这种服务器具有接收多个客户端连接的能力,并且允许多个客户端同时使用服务器资源。通过实现并发处理,服务器可以有效地利用系统资源,提高系统的性能和吞吐量,为多个用户同时提供服务‌。

2、如何实现并发服务器

        并发服务器的实现方式包括多线程、多进程和异步IO等。多线程是常见的方式,服务器创建多个线程来处理多个客户端请求,提高系统的响应速度和效率。接下来文章以多线程的实现方式为例来体现并发服务器一对多的情形。

3、实例代码

void * recv_mob_thread(void *arg)
{
	int ret;
	int fd;
	char buf[SIZE];
	//char flag=0;
	int newfd = *((int *)arg);
	pthread_detach(pthread_self());
    /*--------此处为服务线程逻辑代码段,即响应对应newfd客户端进行交互服务---------*/
}
void start_tcp_server(void)
{
	
	int ret = -1;
	int newfd ;
	//recv_coord_fun();
	//1.买电话
	int fd = socket(AF_INET, SOCK_STREAM, 0);
	if (fd == -1) {
		perror("socket");
	}
	//重用端口
	int on = 1;
	setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));

	//2.绑卡 ip+port
	struct sockaddr_in server; //设置服务端ip+port
	server.sin_family = AF_INET;
	server.sin_port = htons(12345);
	server.sin_addr.s_addr = htonl(INADDR_ANY);
	//server.sin_addr.s_addr = inet_addr("192.168.10.251");
	ret = bind(fd, (struct sockaddr *)&server, sizeof(server));
	if (ret == -1) {
		perror("bind");
	}
	
	//3.监听

	listen(fd, 5);
	//4.接听
	struct sockaddr_in client; //接收客户端ip+port对象
	socklen_t len = sizeof(client);

	printf("tcp server start... \n");
	system("netstat -na | grep 12345"); //查看tcp连接状态
	// 接收客户请求并建立和服务器端连接 并发服务器
	while (1) {
		newfd = accept(fd, (struct sockaddr *)&client, &len); //阻塞函数
		//没有客户端请求就让进程暂停,当有请求成功,建立连接返回
		if (newfd == -1) {
			perror("accept");
		}
		printf("client ip=%s\n", inet_ntoa(client.sin_addr));
		printf("client port=%d\n", ntohs(client.sin_port));
		printf("客户端 fd=%d 上线!\n", newfd);
		

		//5.通信
		//创建接收线程
		pthread_t tid;
		pthread_create(&tid, NULL, recv_mob_thread, &newfd);
	}
	//6.挂电话
	sleep(10);
	close(fd);


}

        最关键的部分在于while(1)中加入了accept函数和pthread_create函数,并且每一个accept函数的返回值对应着不同的客户端,因此传入线程的newfd也一 一对应,从而实现所谓并发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值