【发布时间】:2012-11-05 18:58:33
【问题描述】:
我有两个应用程序,一个是客户端,另一个是服务器。服务器将客户端作为子线程启动。然后客户端通过其标准输出输出其命令。服务器等待命令并相应地响应。
基本上客户端服务器通过标准输出。
例如:
client >> Move north
Server >> Your new location is {2,3}
client >> Move north
Server >> Your new location is {2,2}
client >> Shoot east
Server >> Projectile 66638 heading east {3,2}
问题是我不知道如何将这两个应用程序连接在一起,以便服务器读取并响应客户端应用程序。
我想使用命令行作为通信层的原因是我想让客户端的创建尽可能简单。
同时可能有多个客户端,客户端应该能够相互依赖地与服务器通信。 (他们应该看不到彼此的通信)
目前我正在通过CreateProccess() 函数启动应用程序。此功能可以轻松设置应用程序的初始命令行参数。只是没有之后的交流。
我的问题是:
- 作为线程启动客户端应用程序的服务器应用程序如何读取/写入客户端标准输出?
【问题讨论】:
-
您需要做的第一件事就是查找how to make a pipe in c++
-
尝试重定向标准输出是使用命名管道的一种漫长而痛苦的方式。如果您已经使用 CreateProcess(),请使用此 SDK 文章获取指导:msdn.microsoft.com/en-us/library/windows/desktop/…
-
在使用线程时,您不能真正使用
stdout/stdin作为通信方式。如果您将客户端放在单独的 进程 中,它会起作用,但我不会称之为好的设计。相反,您应该查看其他通信方式,例如管道或套接字。当您的客户端不是您的服务器的一部分时,这将对您有所帮助。 -
您的问题存在一些歧义...您提到了两个线程(甚至标记为
pthreads,这在 Windows 中通常不可用)和CreateProcess。CreateProcess函数创建一个进程而不是线程。 -
至于设置/获取新进程的标准输入/输出句柄,你检查过
STARTUPINFO结构吗?
标签: c++ winapi createprocess