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

我已经实现了简单的客户端与服务器聊天,用的是tcp我觉得我还需要两个步骤才能实现1.可以连多个客户端到服务端,并且服务端都可以看到客户端所发信息。2.各个客户端可以看到其... 我已经实现了简单的客户端与服务器聊天,用的是tcp
我觉得我还需要两个步骤才能实现
1.可以连多个客户端到服务端,并且服务端都可以看到客户端所发信息。
2.各个客户端可以看到其他客户端发送的信息。
我想问,这两步应该怎样实现,我最大的问题是不知道怎么实现加入多线程的部分,我知道可以在服务器端用一个List把多个ServerSocket对象装起来,然后客户端没什么变化。但这具体点要怎么实现呢?求大哥哥大姐姐帮帮小弟。。。。
展开
 我来答
262454893
推荐于2016-04-04 · TA获得超过131个赞
知道答主
回答量:169
采纳率:0%
帮助的人:116万
展开全部
这么搞:
客户端主程序
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邮箱
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式