我在写一个执行服务器 - 客户端关系的Windows程序。为Windows编写非阻塞stdin读取函数?
我使用select()
以获取客户端的请求,以及用户的命令(物理上位于服务器后面的那个命令)。
看起来select()
适用于客户端的请求,但不适用于stdin的输入。
而且,我不从stdin
因为后者没有被监控继承ReadFile()
,换句话说,它是不是FD_SET(stdin, (fd_set)myread_fds)
。有没有办法以非阻塞的方式从stdin获取输入?
我在写一个执行服务器 - 客户端关系的Windows程序。为Windows编写非阻塞stdin读取函数?
我使用select()
以获取客户端的请求,以及用户的命令(物理上位于服务器后面的那个命令)。
看起来select()
适用于客户端的请求,但不适用于stdin的输入。
而且,我不从stdin
因为后者没有被监控继承ReadFile()
,换句话说,它是不是FD_SET(stdin, (fd_set)myread_fds)
。有没有办法以非阻塞的方式从stdin获取输入?
我想你要找的不是select(),而是WaitForMultipleObjects(),它可以等待套接字和控制台I/O。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms687025(v=vs.85).aspx
您为您的服务器设计方案是非常具有挑战性的。许多优秀的程序员已经尝试过并最终放弃了。即使你可以得到它的工作,它也不会是可扩展的。
一个更好的计划,恕我直言,是编写一个单独的应用程序,照顾'服务器用户'的命令。这个应用程序称为SUG(服务器用户gui)是服务器的另一个客户端。服务器以同样的方式照顾来自SUG和远程客户端的两个请求。这使得服务器设计更简单,并且GUI不会影响服务器的性能。