2009-08-21 4 views
0

NetFoss требует, чтобы запустить его с помощью командной строки, подобной этой:Передача сокета из C# для NetFoss

nf.bat/п [#]/ч [#] [командной строки] где/п [# ] - номер узла, а/h [#] - дескриптор сокета ОС.

Я хочу написать что-то на 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?

Кто-нибудь знает, что мне не хватает?

EDIT:

Я забыл упомянуть, что я также попытался установить UseShellExecute в TRUE, и это вызывает ошибку NetFoss говоря, что это неверный дескриптор. Насколько я понимаю, мне придется дублировать дескриптор каким-то образом, чтобы неуправляемое приложение могло получить к нему доступ? Есть ли способ выполнить то, что я пытаюсь сделать с помощью C#?

Спасибо, Марк

ответ

1

Это нормально, что выходы DOS приложения в окне консоли, но он должен также выводить на телнет клиента.

Поскольку вы видите начальное сообщение версии NetFoss в своем telnet-клиенте, мы знаем, что дескриптор сокета успешно передается в NetFoss ... Поэтому похоже, что проблема заключается в том, что ваше приложение DOS не известно FOSSIL или в настоящее время не настроен для использования метода FOSSIL или INT14h.

С уважением, Майк NetFoss разработчик

+0

Я извиняюсь за не обновлять это раньше, но мне кажется, что он работает все вместе. У меня зависало то, что я создавал клиента telnet во Flash, и поскольку он был междоменным, он сначала выполнял запрос на подключение и передачу междоменной политики, прежде чем ему разрешалось полностью подключиться. Я просто добавил код для обработки двух разных сценариев до передачи соединения, и все работало, как ожидалось. Но спасибо за ответ! :) – Lusid