多线程如何实现tcp多客户端聊天
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程如何实现tcp多客户端聊天相关的知识,希望对你有一定的参考价值。
我已经实现了简单的客户端与服务器聊天,用的是tcp
我觉得我还需要两个步骤才能实现
1.可以连多个客户端到服务端,并且服务端都可以看到客户端所发信息。
2.各个客户端可以看到其他客户端发送的信息。
我想问,这两步应该怎样实现,我最大的问题是不知道怎么实现加入多线程的部分,我知道可以在服务器端用一个List把多个ServerSocket对象装起来,然后客户端没什么变化。但这具体点要怎么实现呢?求大哥哥大姐姐帮帮小弟。。。。
客户端主程序
int main()
一个单链表的头节点 root;
一个读写锁 //用来控制链表的操作
开始监听
while(1)
if监听到了新的tcp连接
malloc一个链表节点p
取得写锁
把p加到链表的最后面
启动一个新的线程
xinxiancheng(socketfd,p);//正确的写法大概是这样pthread_create(&m_tid,&attr,armscHandler,arg)
释放写锁
线程函数这样搞
xinxiancheng(int socket,struct node *p)
while(1)
读sockt
如果读到了(如果对方关闭了则直接break)
获取写锁
把读到的内容写到p里面(struct node 里面一定要有一个存放读到的内容的buff)
释放写锁
获取读锁
从root开始读
把所有链表里的内容写到socket里面。
释放读锁
大概思路就是这样。还有一些细节。比如:node的buff怎么控制,写socket的时候要不要区分谁是谁,读写的方式(推荐非阻塞)等等。这些都可以在上面的基础上进行细化。追问
有程序例子吗,375189768@qq.com是我的qq邮箱
本回答被提问者采纳以上是关于多线程如何实现tcp多客户端聊天的主要内容,如果未能解决你的问题,请参考以下文章