NetFoss では、次のようなコマンド ラインで実行する必要があります。
nf.bat /n[#] /h[#] [コマンド ライン] /n[#] はノード番号、/h[#] は OS ソケット ハンドルです。
telnet BBS がドア ゲームを実行するときに行うことと非常によく似たものを C# で作成したいと考えています。クライアントソケットを受け入れ、クライアントから渡された情報を少し収集し、そのソケットを NetFoss に渡して、fossil ドライバーを介した通信をサポートする DOS ベースのアプリケーションを実行するために使用する必要があります。
私は正直なところ、これをどのように行うかについて推測していましたが、ここに私が思いついたものがあります:
class Program
{
const int BACKLOG_SIZE = 20;
static void Main(string[] args)
{
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
server.Bind(new IPEndPoint(IPAddress.Any, 3102));
server.Listen(BACKLOG_SIZE);
while (true)
{
Socket socket = server.Accept();
Process p = new Process();
p.EnableRaisingEvents = false;
p.StartInfo.FileName = @"c:\netfoss\nf.bat";
p.StartInfo.Arguments = @"/n1 /h" + socket.Handle + @" c:\game\game.bat 1";
p.StartInfo.WorkingDirectory = "c:\netfoss";
p.StartInfo.UseShellExecute = false;
p.Start();
}
}
}
興味深いことに、NetFoss が game.bat 経由で実行しているアプリケーションは、C# アプリケーションのコンソール ウィンドウに出力されていますが、telnet クライアントには出力されていません。さらに興味深いのは、telnet クライアントが通信可能であることを示す最初の NetFoss メッセージを受信していることです。ソケット付き。では、NetFoss に渡されたアプリケーションが、telnet クライアントではなくコンソール ウィンドウに出力するのはなぜですか?
私が欠けているものを知っている人はいますか?
編集:
UseShellExecute を TRUE に設定しようとしたことを忘れていましたが、無効なハンドルであるという NetFoss エラーがスローされました。私の理解では、管理されていないアプリケーションがアクセスできるように、何らかの方法でハンドルを複製する必要がありますか? C# を使用して私がやろうとしていることを達成する方法はありますか?
ありがとう、マーク