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#完成我想做的事情?
谢谢, 马克
答案 0 :(得分:1)
DOS应用程序输出到控制台窗口是正常的,但它也应该输出到telnet客户端。
由于您在telnet客户端中看到了初始的NetFoss版本消息,我们知道套接字句柄正在被传递给NetFoss ...所以听起来问题是您的DOS应用程序不是FOSSIL意识到的,或者是目前尚未配置为使用FOSSIL或INT14h通信方法。
问候,迈克 NetFoss开发人员