我正在尝试用 C 语言编写一个聊天服务器,允许使用 POSIX 套接字在两个客户端之间进行通信。我不确定我是否很好地掌握了这个概念,或者我应该如何设置客户端和服务器之间的通信协议(protocol)。
我知道我需要一个套接字来bind()
服务器端口,以便我可以接受来自客户端的传入连接,但是为了同时连接两个客户端,我需要创建当我 accept()
时,每个客户端都有一个套接字,或者我应该 accept()
一个客户端,然后 fork()
这样我就可以另一个客户接受吗?我还不担心并发聊天,这更像是一种乒乓方法,客户端需要在 send()
之后等待 recv()
,然后才能发送可以输入新消息。
最佳答案
处理多个客户端有两种方法:使用非阻塞 IO 和使用线程。对于诸如聊天之类的小事情,我宁愿使用非阻塞,因为我不必担心锁和线程。检查select
和 poll
功能。
主循环会执行如下操作:
- 构建一个包含您想听的所有 fd 的集合
- 等待
select
返回 - 使用
FD_ISSET
检查主fd(您传递给监听的那个)上的传入连接。然后您可以accept()
并将新的 fd 保存在您的连接列表中。 - 处理您感兴趣的其余 fd(使用
FD_ISSET
循环遍历列表以检查事件套接字)。
关于使用 C 语言编写的带有套接字的聊天服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3711667/