Socket verstuurd niet alle data.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Cake Masher

Cake Masher

30/01/2012 17:48:09
Quote Anchor link
Beste,

Ik ben wat aan het experimenteren met de socket_listen functie.
Nu heb ik zo dat de socket een verbinding ontvangt, en er vervolgens na gaat luisteren.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
    $this
->sock = socket_create (AF_INET, SOCK_STREAM, SOL_TCP);
    socket_bind ($this->sock, '0.0.0.0', $port);
    socket_listen ($this->sock);
?>



Op het moment probeer ik zo te maken, dat een bestand (in dit geval een .html bestand) over gezet word naar de socket. Nu heb ik een while loop, hierin word de html pagina uitgelezen, en meteen door gestuurd de socket in.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
    $handle
= fopen ($file, "r");

    while ($curr_line = fgets ($handle))
        $this->send ($array['socket'], $curr_line, false);

    fclose ($handle);



    private function send ($sock, $data, $newline = true)
    {

        if ($newline)
            $data = $data . "\r\n";
                        
        if (socket_write ($sock, $data, strlen ($data)))            
            return true;
        else
            return false;
    }

?>


Nu is het probleem, dat ik een deel van de HTML pagina mis.
Het volgende word verstuurd:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
<strong>Test Image</strong><br />
<img src="img2.png" alt="Test Image" />


het volgende ontvang ik:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
<strong>Test Image</strong><br />
<img src="img2.png" alt="Test Image"


Weet iemand waar ik fout ga?
Ik heb de while loop al eerder geprobeerd aan te passen d.m.v. de feof functie, en het volgende:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

    $sending
= true;                                            
    while ($sending)
    {

        $data = @fgets ($handle);                                            
            if ($data != "")
                $this->send ($array['socket'], $data, false);
            else
                $sending = false;
    }


?>


Ik hoop dat iemand me veder kan helpen.

Alvast bedankt!
Gewijzigd op 30/01/2012 18:23:24 door Cake Masher
 
PHP hulp

PHP hulp

26/04/2024 01:53:19
 
Pieter Jansen

Pieter Jansen

30/01/2012 18:31:23
Quote Anchor link
Probeer eens te kijken hoeveel bytes er verstuurd worden over de socket, als dit aantal niet overeen komt, weet je dat er ergens een buffer fout zit. Een buffer fout kun je opvragen met socket_error() of nee, socket_last_error() ofzo. socket_write() geeft een int terug van het aantal bytes dat gestuurd is.
 
Cake Masher

Cake Masher

30/01/2012 21:57:00
Quote Anchor link
Het blijkt dat alles toch wel verstuurd word.

Wat ik probeer te maken is een eigen webserver. Wat tot nu toe aardig lukt.

Het probleem was, dat de browser de verbinding al sloot, voordat alle data verstuurd was. Toen ik de content length met 1 verhoogde, verstuurde hij wel alle data.

Nu zit ik met plaatjes.. Zodra een plaatje opgevraagd word door IE, laat hij hem mooi zien. Chrome doet het zelfde, maar als ik dat probeer met FF, dan laat hij i.p.v. het plaatje, de bron van het plaatje zien op de pagina.

Weet iemand wat ik fout doe?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.