[英]C/C++ server, communicating by stdin/stdout with clients (blocking on stdin until a number of bytes has been read)
這是關於通過stdin / stdout進行進程間通信的問題。
問題是我有一個COM庫,但我無法將其與任何Java-COM橋一起使用(一個特定的功能始終會導致核心轉儲)。 但是我可以通過C ++程序使用它。
因此,我決定用C ++編寫包裝服務器程序來為我調用這些程序,並通過stdin / stdout從Java與之通信,但是我在這里遇到了問題。 我決定使用protobufs來傳遞消息,主要問題是在C ++端讀取輸入。 我需要一個方法,該方法將阻塞直到將一定數量的字節寫入stdin才能讀取。
這個想法是使用Google的protobuf,並像這樣建立通信:
由於缺乏對C ++和Windows編程的了解(我使用MSVS2013社區對其進行編譯,並且有太多特定於Windows的marcos / typedefs),設置這兩種通信方式比我想象的要困難得多從所有這些COM代碼)。
有沒有一些第三方庫,可以使創建這樣一個簡單的服務器變得簡單呢?
PS:可以是C,可以是C ++,我只需要它在Windows上運行即可。
一個相對簡單的消息處理循環可能看起來像這樣。 但是,您應該真正檢查兩個讀取的返回值並在那里處理錯誤。
void read_and_process_message(void) {
while(true) {
long nMessageBytes;
read(stdin, &nMessageBytes, sizeof(long));
//Convert from network byte-order to local byte order
nMessageBytes = ntohl(nMessageBytes);
char * buffer = malloc(nMessageBytes);
read(stdin, buffer, nMessageBytes);
// Do something with your buffer and write to stdout.
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.