0

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# を使用して私がやろうとしていることを達成する方法はありますか?

ありがとう、マーク

4

1 に答える 1

1

DOS アプリケーションがコンソール ウィンドウに出力するのは正常ですが、telnet クライアントにも出力する必要があります。

telnet クライアントに初期 NetFoss バージョン メッセージが表示されているので、ソケット ハンドルが正常に NetFoss に渡されていることがわかります...つまり、DOS アプリケーションが FOSSIL を認識していないか、現在構成されていないことが問題のようです。 FOSSIL または INT14h 通信方式を使用する。

よろしく、Mike NetFoss 開発者

于 2009-09-25T15:28:01.753 に答える