NetFoss требует, чтобы вы запустили его с командной строкой, подобной этой:
nf.bat / n [#] / h [#] [командная строка]
где / n [#] - номер узла, а / h [#] - дескриптор сокета ОС.
Я хочу написать что-то на C #, очень похожее на то, что бы делала телнет-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?
Кто-нибудь знает, что мне не хватает?
EDIT:
Я забыл упомянуть, что я также пытался установить для UseShellExecute значение TRUE, и это выдает ошибку NetFoss, говорящую о том, что это недопустимый дескриптор. Насколько я понимаю, мне придется каким-то образом дублировать дескриптор, чтобы неуправляемое приложение могло получить к нему доступ? Есть ли способ выполнить то, что я пытаюсь сделать с помощью C #?
Спасибо,
Марк