2009-08-21 6 views
0

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

Répondre

1

Il est normal que les sorties d'application DOS à la fenêtre de la console, mais il devrait également sortie au client telnet. Puisque vous voyez le message initial de la version NetFoss dans votre client telnet, nous savons que le handle de socket est transmis avec succès à NetFoss ... Il semble que le problème est que votre application DOS n'est pas au courant de FOSSIL, ou n'est actuellement pas configuré pour utiliser une méthode de communication FOSSIL ou INT14h.

Cordialement, Mike développeur NetFoss

+0

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