通过选择功能读取控制台输入

时间:2014-04-21 11:37:10

标签: c++ sockets visual-c++ file-descriptor

我正在尝试编写使用套接字通过网络发送数据的程序。现在我需要来自控制台的输入命令。我有套接字选择功能。在linux中,您可以使用select在套接字和conolse中查找数据输入。我如何在visual c ++上获得相同的功能?

当我在select函数中插入控制台描述符时,它返回错误10038(非插槽上的套接字操作。)

2 个答案:

答案 0 :(得分:1)

Windows不支持将select用于任意句柄。在Linux和其他形式的Unix中,"所有句柄都是相同的",无论它们是控制台,套接字还是其他任何句柄,它都不重要。

请注意,Windows中的select不会使用HANDLE,而是采用特殊的SOCKET类型的句柄。查看Windows的定义' fd_set

最简单的解决方案可能是使用第二个线程来读取控制台输入。当然无法将控制台包含在select电话中。可能有一些方法可以说服Windows SOCKET是一个可等待的对象,并将它用于WaitForMultipleObjects之类的东西,以及一个控制台输入句柄 - 但我并不相信(而且我没有Windows设置可以试用它。

答案 1 :(得分:0)

您可以使用控制台ReadFile尝试HANDLE。因此,您可以将控制台作为文件读取。您还可以使用ReadFileWrtieFile读取/写入套接字 请参阅Console HandlesReadFileWriteFile

的MSDN文档

不确定这是你想要的。如果您想在Windows上使用某种select,可以查看IO Completion Ports(不确定它们是否与控制台配合使用 - 请查看文档)