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