【linux网络编程学习笔记】第六节:TCP线程多路并发实现群聊功能

本文档介绍了如何使用Linux网络编程实现TCP线程多路并发的群聊功能,包括TCP服务器与客户端的双向通信、链表的初始化与管理,以及线程监听与信息转发。通过详细步骤和示例代码,阐述了群聊功能的关键实现细节。
摘要由CSDN通过智能技术生成

Enrich your life today,. yesterday is history.tomorrow is mystery

  充实今朝,昨日已成过去,明天充满神奇

TCP线程多路并发实现群聊功能

实现步骤

1、实现TCP_server与TCP_client的双向通信

2、初始化一条单向链表

2.1、定义链表的结点

2.2、链表操作函数

2.4、新建客户端结点,插入链表

3、接受客户端请求,创建线程监听

3.1、接受客户端请求

3.2、线程转发客户的信息

TCP服务器例程 tcp_server.c

TCP客户端例程 tcp_client.c


        学完了linux的系统编程,正好可以和本阶段的网络编程结合起来,实现一个好玩的功能,QQ群聊的功能,本次主要是利用TCP服务器和TCP客户端和线程多路并发的方式来实现。

实现步骤

        群聊的功能实现原理很简单,在每服务器中每条监听客户端的线程中一旦有接收到数据,就转发给其他客户端。具体步骤如下:

  1. 1.建立TCP服务器与客户端的双向通信,再次基础上进行扩展。
  2. ​​​​​​​2.建立一条保存每一个客户端信息的单向链表,链表每个节点包含客户端的socket描述符、IP地址、端口号、线程的pid。
  3. 3.access每收到一个客户端的连接申请时,就把客户端的信息形成一个结点,插入链表中,并创建一条线程用于接收当前客户端的消息,并根据链表的信息结点转发到其他客户端。

 

        服务器就相当于一个搬运工,本篇章涉及的知识点前面的篇章也都涉及到,实现起来并不难。下面就跟我一起敲代码把。

1、实现TCP_server与TCP_client的双向通信

        这一步如何实现已经完成了,就不再花时间介绍了,不明白的同学点击跳转。

2、初始化一条单向链表

2.1、定义链表的结点

         根据上面的需求,需要包含客户端的描述符、IP地址、端口号、线程的pid这几个数据,也可以根据自身的情况进行定义。

typedef struct client_info{
	int client_fd;//客户端的描述符
	char ip[16];//IP地址
	short port;//端口号
	pthread_t tid;//当前线程的pid

	struct client_info *next;
}client_info_node;

2.2、链表操作函数

为了方便链表的初始化、插入和遍历等,可以封装一系列的链表功能函数。

申请客户端信息链表的节点:

static client_info_node *request_client_info_node(const client_info_node *info)
{
	client_info_node *new_node;
	new_node = malloc(sizeof(client_info_node));

	if(new_node == NULL)
	{
		perror("申请客户端节点异常");
		return NULL;
	}

	if(info != NULL)
		*new_node = *info;
	new_node->next = NULL;
	return 	new_node;
}

将结点插入链表:

static inline void insert_client_info_node_to_link_list(client_info_node *hea
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值