在服务器和客户端之间聊天

时间:2016-08-13 08:35:43

标签: sockets

我想在服务器和客户端之间创建一个聊天程序,我希望客户端或服务器能够随时向另一端发送消息,而无需等待示例:

Client: hi
Server: hi
Server: I'm the server.
Server: How are you?
Client: Good.

在此示例中,服务器不会等待客户端回复并随时发送另一条消息。

我应该使用函数select吗?如果是这样,我应该如何确定超时,超时值是忙等待的解决方案?

select函数是解决此问题的最佳方法吗?

感谢。

1 个答案:

答案 0 :(得分:1)

使用select似乎是正确的方法,特别是如果您希望程序在Windows上运行。这将允许您阻止进程并同时等待来自多个客户端的消息。

通常,您应将超时设置为NULL,以便服务器无限期地阻止来自客户端的请求。仅当您因其他原因需要定期唤醒服务器时,超时才有用。

如果您的目标是Unices(如Linux),使用poll会更容易,更有效。这基本上是相同的,但界面更容易使用。如果文件描述符编号大于1024,则select变得非常难以使用,如果您希望服务器处理大量客户端,则会出现问题。

如果您专门针对Linux并且不关心可移植性,您甚至可以使用epoll,它具有更多的性能优势,并且可以说更容易使用。

如果您只定位Windows,则可以为每个套接字create event objects,然后使用WaitForMultipleObjectsEx等待来自其中任何一个的数据。这提供了与poll类似的功能,但API非常复杂。

相关问题