当前位置: 技术问答>linux和unix
socket 多客户
来源: 互联网 发布时间:2017-04-07
本文导语: 我要做一个聊天软件,关于socket了解的不是很多,但是基本的连接accept,connec都懂了,现在唯一一个不懂的是服务器如何接收客户端发过来的消息,我知道用recv可以接收到客户发过来的消息,但是recv是要绑定一个sockadd_in,也...
我要做一个聊天软件,关于socket了解的不是很多,但是基本的连接accept,connec都懂了,现在唯一一个不懂的是服务器如何接收客户端发过来的消息,我知道用recv可以接收到客户发过来的消息,但是recv是要绑定一个sockadd_in,也就是绑定一个客户的sockadd_in,但我有很多客户的时候,就需要很多的recv函数,这样就得开很多的线程来接收客户发过来的消息,有没有别的办法只用一个线程就可以接收所有客户过来的的消息,如下:
main()
{
pthread_create(,fun,0,0);
while(true)
{
socket=accept();
}
}
void * fun(void *) //接收数据
{
}
main()
{
pthread_create(,fun,0,0);
while(true)
{
socket=accept();
}
}
void * fun(void *) //接收数据
{
}
|
去看看epoll select/poll模型
|
I/O多路复用技术详解之select模型:
http://blog.csdn.net/bengda/article/details/7716629
I/O多路复用技术详解之poll模型:
http://blog.csdn.net/bengda/article/details/7716643
I/O多路复用技术详解之epoll模型:
http://blog.csdn.net/bengda/article/details/7716647
http://blog.csdn.net/bengda/article/details/7716629
I/O多路复用技术详解之poll模型:
http://blog.csdn.net/bengda/article/details/7716643
I/O多路复用技术详解之epoll模型:
http://blog.csdn.net/bengda/article/details/7716647