NetFoss vous oblige à exécuter avec une ligne de commande semblable à ceci:Passant Socket De C# à NetFoss
nf.bat/n [#]/h [#] [ligne de commande] où/n [# ] est un numéro de noeud et/h [#] est un descripteur de socket du système d'exploitation. Je veux écrire quelque chose en C# très similaire à ce que ferait un telnet BBS quand il court des jeux de porte. Il devrait accepter le socket client, rassembler un peu d'informations transmises par le client, puis passer le socket à NetFoss pour être utilisé pour exécuter une application DOS qui prend en charge les communications via un pilote fossile.
Honnêtement, je ne faisais que planer le doute sur la façon d'aller à ce sujet, et voici ce que je suis venu avec:
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();
}
}
}
Il est intéressant, l'application qui NetFoss est en cours d'exécution par l'intermédiaire game.bat est d'être sortie au C# fenêtre de la console de l'application, mais pas le client telnet, et encore plus intéressant est que le client telnet reçoit le message NetFoss initial qui montre qu'il est capable de communiquer avec le socket. Alors, pourquoi l'application qui est transmise à NetFoss sort-elle dans ma fenêtre de console au lieu du client telnet?
Quelqu'un sait-il ce que je manque?
EDIT:
j'oublié de mentionner que j'ai aussi tenté de mettre UseShellExecute à TRUE, et cela génère une erreur NetFoss disant qu'il est un handle non valide. D'après ce que je comprends, je devrais dupliquer le handle d'une manière ou d'une autre afin que l'application non-gérée puisse y accéder? Est-il possible d'accomplir ce que j'essaye de faire en utilisant C#?
Merci, Marc
Je me excuse pour ne pas mettre à jour cela plus tôt, mais il semble que cela fonctionnait tout le long. L'accrochage que j'ai eu, c'est que je construisais un client telnet dans Flash, et comme il était inter-domaine, il faisait d'abord une demande de stratégie de connexion et de domaine inter-domaine avant de pouvoir se connecter complètement. Je viens d'ajouter le code pour gérer les deux différents scénarios avant de passer la connexion et tout a fonctionné comme prévu. Mais merci pour la réponse! :) – Lusid