0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ゲートウェイとしての StreamRelay.NET.exe

Last updated at Posted at 2017-06-21

ストリームの実体として、TCPやUDPだけではなく、名前付きパイプなどが指定できるので、プロトコル変換器としても利用できる

名前付きパイプのストリームはSystem.IO.Pipes.NamedPipeClientStreamとかSystem.IO.Pipes.NamedPipeServerStream
とかなんだけど、双方向を示すSystem.IO.Pipes.PipeDirectionがあるけど、
read始めたら(別スレッドから)writeできないなど、実質双方向ではないようだ。


名前付きパイプへ変換

名前付きパイプは、ポート番号「-2」

上記の仕様なので、ポート番号「-2」では、名前付きパイプを2本(リクエストの方向とレスポンスの方向)使う。

なので、

サーバ側
StreamRelay.NET.exe -VerboseMode -LocalPort -2 -RemotePort 0 -LocalName StreamRelay

クライアント側
StreamRelay.NET.exe -VerboseMode -LocalPort 0 -RemotePort -2 -RemoteName StreamRelay -RemoteHost 192.0.2.1

で、名前付きパイプの名前「StreamRelay」で通信する

パケットキャプチャで、どんなだろ・・・という時に使えるかもしれない。


標準入出力のリダイレクト先としての名前付きパイプ

標準入出力(ポート番号=0)のリダイレクトとしてファイルとかが使えるのだが、以下のオプションで名前付きパイプもリダイレクト先として指定できる。

-LocalInputNamePipe "名前"
-LocalOutputNamePipe "名前"
-RemoteInputNamePipe "名前"
-RemoteOutputNamePipe "名前"

これは、上記の仕様(双方ではない)から、一本ずつ(リクエストのみとかレスポンスのみ)とか指定できるようにしてみた。


マルチキャストUDPへ変換

マルチキャストアドレス(224.0.0.4)とUDPポート(33333/udp)という相手と、コンソール間でのデータ交換の場合

ローカルと呼称する側にマルチキャストを対応させる場合はこんな感じ
StreamRelay.NET.exe -LocalHost 224.0.0.4 -LocalPort 33333 -LocalUDP -RemotePort 0

リモートと呼称する側にマルチキャストを対応させる場合はこんな感じ
StreamRelay.NET.exe -LocalPort 0 -RemoteHost 224.0.0.4 -RemotePort 33333 -RemoteUDP

パケットキャプチャで、どんなだろ・・・という時に使えるかもしれない。

マルチキャストUDPは、コンソールなどと同じ扱い(一つの共通のスレッド)にしている
つまり
StreamRelay.NET.exe -LocalPort 90 -RemoteHost 224.0.0.4 -RemotePort 33333 -RemoteUDP
の場合、ローカルと呼称する側に接続がある度に、リモート側のオブジェクトを生成するのではなく、一つのオブジェクトが複数のローカル側のオブジェクトと対話するようになっている(ブロードキャストモード/ブローカーモード)


.NET Remoting(WCF)へ変換

ver3.2.0.0 で実装した。

ポート番号は、「0以上」

必須オプションは、

  • LocalRemotingType [tcp/icp/http]

または

  • RemoteRemotingType [tcp/icp/http]

[Local|Remote]RemotingType のオプションは

  • tcp .NET Remoting を tcp 経由で行う
  • http .NET Remoting を http 経由で行う
  • icp* .NET Remoting を icp(LPC) 経由で行う。これはRemote側の場合は「-RemoteHost」のオプションは必要ない

既定の接続ポイント名は「remoteObj」

変更する場合は、

  • LocalRemotingType "name"

または

  • RemoteRemotingType "name"

を指定すればよい。

相手側の死活監視をしたい場合は

  • LocalRemotingHeartbeat

または

  • RemoteRemotingHeartbeat

を指定する。
「--ThreadInterval」(既定は500ms)3(既定は5003=1500ms) の間、データ受信がないと、死活監視のリモートメソッドを発行する。

他には

  • LocalRemotingSecure

または

  • RemoteRemotingSecure

オプションもある


目次へ戻る

目次というか最初の一歩

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?