Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1547 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Serveur web : déconne avec FF mais pas IE

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Serveur web : déconne avec FF mais pas IE

n°1373691
Arjuna
Aircraft Ident.: F-MBSD
Posté le 24-05-2006 à 00:25:25  profilanswer
 

Salut,
Je suis en train de m'amuser à faire un petit serveur web pour le fun.
J'en ai chié un max, et finalement en deux heures j'en suis arrivé à ce truc...
 

Code :
  1. using System;
  2. using System.Net;
  3. using System.Net.Sockets;
  4. using System.Text;
  5. using System.Threading;
  6. using System.Windows.Forms;
  7. //using System.Collections.Generic;
  8. //using System.ComponentModel;
  9. //using System.Data;
  10. //using System.Drawing;
  11. namespace WebServer
  12. {
  13.     public partial class Form1 : Form
  14.     {
  15.         Thread t;
  16.         public Form1()
  17.         {
  18.             InitializeComponent();
  19.         }
  20.         private void Form1_Load(object sender, EventArgs e)
  21.         {
  22.         }
  23.         private void button1_Click(object sender, EventArgs e)
  24.         {
  25.             StartApplication();
  26.         }
  27.         private void button2_Click(object sender, EventArgs e)
  28.         {
  29.             StopApplication();
  30.         }
  31.         private void StartApplication()
  32.         {
  33.             pictureStatus.Image = WebServer.Pictures.intermediate;
  34.             StartListenThread();
  35.            
  36.             pictureStatus.Image = WebServer.Pictures.started;
  37.         }
  38.         private void StopApplication()
  39.         {
  40.             pictureStatus.Image = WebServer.Pictures.intermediate;
  41.             StopListenThread();
  42.             pictureStatus.Image = WebServer.Pictures.stopped;
  43.         }
  44.         private void StartListenThread()
  45.         {
  46.             t = new Thread(new ThreadStart(ListenThread));
  47.             t.Start();
  48.         }
  49.         private void ListenThread()
  50.         {
  51.             TcpListener listener = new TcpListener(IPAddress.Parse("127.0.0.1" ), 80);
  52.             listener.Start(255);
  53.             listener.Server.Blocking = false;
  54.             while (true)
  55.             {
  56.                 try
  57.                 {
  58.                     TcpClient client = new TcpClient();
  59.                     try
  60.                     {
  61.                         client = listener.AcceptTcpClient();
  62.                     }
  63.                     catch (SocketException se)
  64.                     {
  65.                         client = null;
  66.                     }
  67.                     if (client != null)
  68.                     {
  69.                         client.Client.Blocking = true;
  70.                         NetworkStream stream = client.GetStream();
  71.                         string txt = string.Empty;
  72.                         byte[] buffer = new byte[4096];
  73.                         long read = 0;
  74.                         while (stream.DataAvailable)
  75.                         {
  76.                             read += stream.Read(buffer, 0, buffer.Length);
  77.                             txt += Encoding.ASCII.GetString(buffer);
  78.                         }
  79.                         stream.Write(Encoding.ASCII.GetBytes("HTTP/1.1 100 Continue\r\n\r\n" ), 0, 25);
  80.                         ProcessedRequest processed = ProcessRequest(txt.TrimEnd());
  81.                         if (processed.errorCode != string.Empty)
  82.                         {
  83.                             string header1 = "HTTP/1.0 " + processed.errorCode + "\r\n";
  84.                             string header2 = (processed.typeMime != string.Empty) ? "Content-Type: " + processed.typeMime : string.Empty;
  85.                             string message = (processed.message != null) ? "\r\nContent-Length: " + processed.message.LongLength.ToString() + "\r\n\r\n" + Encoding.ASCII.GetString(processed.message) : string.Empty;
  86.                             byte[] reponse = Encoding.ASCII.GetBytes(header1 + header2 + message);
  87.                             stream.Write(reponse, 0, reponse.Length);
  88.                         }
  89.                         stream.Close();
  90.                         stream.Dispose();
  91.                         client.Close();
  92.                     }
  93.                 }
  94.                 catch (ThreadAbortException e)
  95.                 {
  96.                     Thread.ResetAbort();
  97.                     break;
  98.                 }
  99.             }
  100.             listener.Stop();
  101.         }
  102.         private void StopListenThread()
  103.         {
  104.             t.Abort();
  105.             t.Join();
  106.         }
  107.         private ProcessedRequest ProcessRequest(string request)
  108.         {
  109.             ProcessedRequest ret = new ProcessedRequest();
  110.             if (request.Length > 0)
  111.             {
  112.                 string[] requestLines = request.Split(new string[] { "\r\n" }, StringSplitOptions.None);
  113.                 string[] method = requestLines[0].Split(' ');
  114.                 switch (method[0])
  115.                 {
  116.                     case "GET":
  117.                         ret.errorCode = "200 OK";
  118.                         ret.message = Encoding.ASCII.GetBytes("<html><body><p><a href=\"toto\">Youpi</a></p><fieldset><legend>Recieved:</legend><pre>" + request + "</pre></fieldset></body></html>" );
  119.                         ret.typeMime = "text/html";
  120.                         break;
  121.                     default:
  122.                         ret.errorCode = "501 Not Implemented";
  123.                         ret.message = null;
  124.                         ret.typeMime = string.Empty;
  125.                         break;
  126.                 }
  127.             }
  128.             return ret;
  129.         }
  130.         private struct ProcessedRequest
  131.         {
  132.             public string errorCode;
  133.             public string typeMime;
  134.             public byte[] message;
  135.         }
  136.     }
  137. }


 
Pour le moment, ça fait pas grand chose :D
 
Par contre, chose étrange : avec IE, aucun problème. Mais avec FF, j'ai quelquefois une erreur "la connection a été fermée par le serveur durant le transfert patati patata".
 
Qu'est-ce qu'il me veut ?
 
J'ai noté que dans ce cas, ProcessRequest me retourne "null", c'est à dire que je n'ai pas reçu de requête de la part de Moz... Il s'est connecté, mais ne m'a rien envoyé, et s'est déconnecté aussitôt en me donnant cette erreur.
 
Du coup, j'ai l'impression que c'est ça qui déconne :
 

Code :
  1. NetworkStream stream = client.GetStream();
  2.                         string txt = string.Empty;
  3.                         byte[] buffer = new byte[4096];
  4.                         long read = 0;
  5.                         while (stream.DataAvailable)
  6.                         {
  7.                             read += stream.Read(buffer, 0, buffer.Length);
  8.                             txt += Encoding.ASCII.GetString(buffer);
  9.                         }

mood
Publicité
Posté le 24-05-2006 à 00:25:25  profilanswer
 

n°1373818
Arjuna
Aircraft Ident.: F-MBSD
Posté le 24-05-2006 à 10:16:17  profilanswer
 

je sens que je ferais mieu d'enculer les mouches, ça aurait plus d'effet...

n°1374015
alien_nan
Posté le 24-05-2006 à 12:31:30  profilanswer
 

Arjuna a écrit :

je sens que je ferais mieu d'enculer les mouches, ça aurait plus d'effet...

 


un up de soutien ? :D
comme je vois que tu n'as pas toujours des réponses sur tes topics, je viens te tenir companie  :hello:  
 

n°1374108
Arjuna
Aircraft Ident.: F-MBSD
Posté le 24-05-2006 à 14:02:23  profilanswer
 

c'est gentil ça :)
 
j'ai toujours le problème.
 
par ailleurs, j'ai voulu virer la couche "TcpClient / TcpListener" pour les remplacer par des Socket, et non plus bosser en partie en mode Blocking, et surtout, passer en assynchrone.
Pas pigé pourquoi, j'ai jamais pu tester, il me dit tout le temps que j'ai un problème de permission :spamafote:
 
Du coup, je suis revenu en arrière, et j'ai fait évoluer le moteur de réponse. Maintenant, je sais aller chercher un fichier sur le HD, retrouver le type mime via un fichier XML (faudra peut-être que je pense à aller voir dans la BDR aussi, ça serait pas plus mal), et renvoyer le contenu, quel que soit son encodage (donc maintenant je sais lire des fichier texte, mais aussi des images notamment :))
 
Reste plus qu'à trouver un intérêt à mon serveur... :D
 
Chose chelou par contre... Chez moi (AMD 3500+ avec 2 Go DDR) c'est ultra rapide. Par contre, au boulot (Centrino 1500 avec 512 Mo DDR) c'est méga lent pour charger une page... Et je semble avoir plus de problèmes de connection que chez moi (j'ai des timeout dans IE)
 
Chelou... :sweat:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Serveur web : déconne avec FF mais pas IE

 

Sujets relatifs
Fonction qui renvoit l'adresse du serveur webCréer un serveur de ping rapide et fiable
Tbrowser capture de lien avant echange serveur se connecter au serveur de base de donnée a distant
debutant serveur web[VB \ Client serveur\ Excel] Sauvegarde sur client
[PHP] faire un ping d'un serveur distantThreads sur un serveur J2EE ? Thread en tant que Singleton?
Ouvrir une URL à partir du serveur web (apache) !Ajax : Récupérer un flux XML coté serveur
Plus de sujets relatifs à : Serveur web : déconne avec FF mais pas IE


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR