当前位置: 技术问答>linux和unix
求C语言做聊天服务器思路
来源: 互联网 发布时间:2016-03-24
本文导语: 我想用Linux C做聊天服务器。目前实现的思路如下: 服务器:socket->bind->listen->accept->fork->在自进程中将客户端1的clientsocket1保存入共享内存中。 当第二个用户以同样方法登陆后,想往第一个用户发送信息,但好像client...
我想用Linux C做聊天服务器。目前实现的思路如下:
服务器:socket->bind->listen->accept->fork->在自进程中将客户端1的clientsocket1保存入共享内存中。
当第二个用户以同样方法登陆后,想往第一个用户发送信息,但好像clientsocket1不能这样保存在共享内存中,直接用客户端1的clientsocket发送信息给客户端1无效。
请问做过聊天方面的大侠,如何解决多进程的socket描述符传递问题?我不想用unix socket那些,感觉太麻烦了。
服务器:socket->bind->listen->accept->fork->在自进程中将客户端1的clientsocket1保存入共享内存中。
当第二个用户以同样方法登陆后,想往第一个用户发送信息,但好像clientsocket1不能这样保存在共享内存中,直接用客户端1的clientsocket发送信息给客户端1无效。
请问做过聊天方面的大侠,如何解决多进程的socket描述符传递问题?我不想用unix socket那些,感觉太麻烦了。
|
为什么不用线程呢?
而且象聊天的这样程序一般选择的是UDP
协议。用来保证速度。
而且象聊天的这样程序一般选择的是UDP
协议。用来保证速度。
|
可以。可以用一个数组来存储。
|
个人觉得服务器不应该保存对客户断的socket描述符,客户端连接服务器并请求服务,之后连接就应该断开。如果连接一直保持的话,将占用很多系统资源,并且系统的文件描述符的数量是有最大限制的。服务器应该保存的是客户断的IP地址信息,并且,客户端也要充当服务器在另一客户端通过服务器转发的请求时使用,这时,服务器又充当了客户端。简而言之,每一端都有双重身份(客户端,服务器)。纯属个人观点,本人也未做过这样的程序。
|
提供个思路算法,用多线程比多进程好,线程可以共享数据,进程要共享数据的需要开辟共享内存,所有的客户连接都必须通过服务器,即使用户1向用户2发送一条消息,该消息是先发到服务器,然后服务器找到用户2的socket,发送过去,以上方法都是建立在TCP连接的方法上的,需要建立一条SOCKET,如果使用UDP,只要知道对方IP就可以,双方都用SELECT方法等待消息就可以。