2017-09-05 5 views
0

C++クライアントとACE_SPIPE_Connector(ACE)を.NETサーバーに接続する際に問題があります。 \。\ pipe \ pipenameというアドレスへのエコーテストが動作している間、ACEライブラリを使用しているC++コードに問題があると思われます。ここで名前付きパイプクライアント(ACE、ACE_SPIPE_Connector)がcsharp(NamedPipeServerStream)サーバーに接続できませんでした

は、.NETサーバーコードです:

var server = new NamedPipeServerStream("acepipe"); 

server.WaitForConnection(); 
StreamReader reader = new StreamReader(server); 

var line = reader.ReadLine(); 
Console.WriteLine(line); 

そしてここでは、C++クライアントコードです:

#if defined (ACE_WIN32) 
#define MAKE_PIPE_NAME(X) ACE_TEXT ("\\\\.\\pipe\\") ACE_TEXT (X) 
#else 
#define MAKE_PIPE_NAME(X) ACE_TEXT (X) 
#endif 

const ACE_TCHAR *rendezvous = MAKE_PIPE_NAME("acepipe"); 

ACE_SPIPE_Stream cli_stream; 
ACE_SPIPE_Connector con; 
int i; 

if (con.connect(cli_stream, 
    ACE_SPIPE_Addr(rendezvous)) == -1) 
{ 
    printf("Named pipe connect failed.\n%s\n", rendezvous); 
    return 0; 
} 

私はここで何が間違っている見当がつかない。

助けが必要ですか?

おかげで、ローター

答えて

0

一方私は、コードの問題を発見しました。 2点または問題:

1.名前付きパイプ名は、それ自身が異なっていました。\ pipe \ acepipe(C++)vs。\ acepipe(C#)。

2.)モード(メッセージ対バイト)。 ACEはデフォルトでメッセージになり、C#ではメッセージになりませんでした。

var server = new NamedPipeServerStream("acepipe", PipeDirection.InOut, 4, PipeTransmissionMode.Message); 

server.WaitForConnection(); 

次のC#コードは、問題を解決しました

関連する問題