2009-08-21 50 views
0

NetFoss要求用类似于此命令行运行它:传递插座从C#到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#做的事情吗?

感谢, 马克

回答

1

,这是正常的DOS应用程序输出到控制台窗口,但它也应该输出到telnet客户端。

由于您在远程登录客户端看到NetFoss的初始版本消息,我们知道套接字句柄正在被传递给NetFoss ......所以听起来问题在于您的DOS应用程序不是FOSSIL意识到的,或者当前未配置为使用FOSSIL或INT14h通信方法。

的问候,迈克 NetFoss开发商

+0

我不更新此越早道歉,但似乎它一直工作。我遇到的问题是我在Flash中构建了一个telnet客户端,由于它是跨域的,它首先在允许完全连接之前进行连接并传递跨域策略请求。我只是添加了代码来处理两种不同的情况,然后按照预期工作。但谢谢你的回应! :) – Lusid 2009-09-26 13:32:02