多线程如何实现tcp多客户端聊天

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程如何实现tcp多客户端聊天相关的知识,希望对你有一定的参考价值。

我已经实现了简单的客户端与服务器聊天,用的是tcp
我觉得我还需要两个步骤才能实现
1.可以连多个客户端到服务端,并且服务端都可以看到客户端所发信息。
2.各个客户端可以看到其他客户端发送的信息。
我想问,这两步应该怎样实现,我最大的问题是不知道怎么实现加入多线程的部分,我知道可以在服务器端用一个List把多个ServerSocket对象装起来,然后客户端没什么变化。但这具体点要怎么实现呢?求大哥哥大姐姐帮帮小弟。。。。

参考技术A 这么搞:
客户端主程序
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多客户端聊天的主要内容,如果未能解决你的问题,请参考以下文章

linux C语言 TCP 多线程 简易聊天室

Java实现多线程局域网聊天室

java实现多客户聊天功能

Java案例:基于TCP的简单聊天程序

Java编程实例-tcp聊天室代码实现

网络编程案例多任务版TCP服务端程序开发