Socket verstuurd niet alle data.
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)
1
2
3
4
5
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);
?>
$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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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;
}
?>
$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:
het volgende ontvang ik:
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)
Ik hoop dat iemand me veder kan helpen.
Alvast bedankt!
Gewijzigd op 30/01/2012 18:23:24 door Cake Masher
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.
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?