如何在 C 中从客户端/服务器上的键盘获取输入命令,同时服务器也在侦听其他请求



我正在用C语言编写客户端服务器程序。问题:当服务器侦听并接受新连接时,它还存储它所连接的 IP。现在,如果我们在仍在运行的服务器程序窗口中输入一个命令说 LIST,那么它应该显示它连接到的 IP 列表?我正在为每个客户端使用 Select() 函数。

简而言之,如何在回答传入连接的同时接受来自键盘的输入?

只需在传递到 select(2) 的文件描述符集中包含标准输入的文件描述符(STDIN_FILENO,又名 0)。 然后,如果输入可用于读取,则从中读取并处理命令;否则,请照常处理套接字。

或者,您可以运行单独的线程来处理用户输入,但鉴于您已经拥有 select 调用,继续使用它可能会更容易。

你可能想看看D.J. Bernstein的tcpserver(见 http://cr.yp.to/ucspi-tcp/tcpserver.html)。基本上,您可以简单地在tcpserver下运行程序,tcpserver将处理所有事情,例如设置套接字,列出您使用的任何端口上的传入连接等。当传入连接到达您指定的端口时,tcpserver 将生成程序的实例,并将传入信息从客户端传输到程序的 STDIN,并将传出信息从程序的 STDOUT 传送回客户端。这样,您可以专注于程序的核心逻辑(并简单地读取/写入stdout/stdin),并让tcpserver处理所有繁重的工作,包括套接字等,并且您可以接受多个同时传入的连接。

就了解当前连接的客户端 ip 而言 - 这可以在服务器运行时使用 netstat 在命令行完成。

最新更新