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