0

NetFoss 要求您使用类似于以下的命令行运行它:

nf.bat /n[#] /h[#] [命令行] 其中 /n[#] 是节点号,/h[#] 是 OS 套接字句柄。

我想用 C# 编写一些非常类似于 telnet BBS 在运行门游戏时所做的事情。它应该接受客户端套接字,收集从客户端传递给它的一些信息,然后将套接字传递给 NetFoss 以用于运行基于 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 回答