[.NET2] Serveur Web qui coupe les requete HTTP

iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 - 6 janv. 2007 à 21:56
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 - 22 janv. 2007 à 22:42
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

ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
21 janv. 2007 à 22:21
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
0
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 4
22 janv. 2007 à 22:42
ok merci, je vais changer la methode de lecture
0
Rejoignez-nous