[.NET2] Serveur Web qui coupe les requete HTTP

Signaler
Messages postés
303
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
-
Messages postés
303
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
-
Bonjour,

J'essaie de mettre en place un serveur Web. J'ai donc un programme qui ecoute le port 80, seulement le probleme c'est que le serveur Web envoie la reponse http au navigateur avant qu'il est recut totalement la requete

voici mon code :

<hr size="2" width="100%" />while (true)
            {
                this.Invoke(new AddTxt(addTxt), "En attente d'une connexion... ");
                TcpClient client = tl.AcceptTcpClient();
                this.Invoke(new AddTxt(addTxt), "Client connecté! \r\r");

                data = null;
                stream = client.GetStream();
                int i;

               

                Byte[] bytes = new byte[256];

                while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
                {
                    data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
                    this.Invoke(new AddTxt(addTxt), String.Format("Received: {0}", data));
                   
                    data =  "HTTP/1.1 200 OK \n";
                    data += "Server: Serveur Perso \r\n";
                    data += "Content-Type : text/HTML \r\n";
                    data += "Content-Length: 260 \r\n";
                    data += "\r\n";

                    byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);

                    stream.Write(msg, 0, msg.Length);
                    this.Invoke(new AddTxt(addTxt), String.Format("Sent: \r\n \r\n{0}", data));
                }
               
                client.Close();
            }
<hr size="2" width="100%" />
Merci pour votre aide

2 réponses

Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
14
salut,

c'est normal : ta boucle while lit 256 octets et envoie la réponse...donc si ta requête fait 512 octets alors tu envoies deux réponses...

de plus, le stream.read ne garantit pas la lecture complète de toutes les données en latences....

enfin, comme HTTP est un proto textuel, tu devrait lire par ligne

http://www.yoda.arachsys.com/csharp/readbinary.html
http://www.csharphelp.com/archives/archive147.html
http://www.codeproject.com/cs/internet/testingsocketservers.asp
http://www.codeproject.com/cs/internet/socketsincsharp.asp

ShareVB
Messages postés
303
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
4
ok merci, je vais changer la methode de lecture