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

问题描述 投票:0回答:2

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

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

c linux sockets client-server posix-select
2个回答
2
投票

只需将标准输入的文件描述符(

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

或者,您可以运行一个单独的线程来处理用户输入,但考虑到您已经有了

select
调用,继续使用它可能会更容易。


1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.