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# 做的事情吗?
谢谢,马克