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#?
Спасибо, Марк
Я извиняюсь за не обновлять это раньше, но мне кажется, что он работает все вместе. У меня зависало то, что я создавал клиента telnet во Flash, и поскольку он был междоменным, он сначала выполнял запрос на подключение и передачу междоменной политики, прежде чем ему разрешалось полностью подключиться. Я просто добавил код для обработки двух разных сценариев до передачи соединения, и все работало, как ожидалось. Но спасибо за ответ! :) – Lusid