janmulder13
Gebruiker
- Lid geworden
- 15 sep 2009
- Berichten
- 43
Hallo,
Ik probeer al een tijdje een werkende socketserver te maken. Eerst heb ik er eentje in C gemaakt (die werkte), maar ons netwerk is daar blijkbaar niet erg geschikt voor. Dus heb ik hem (met een tutorial PHP) geconverteerd naar een PHP bestandje:
(de break;'s staan er gewoon even voor de handigheid, anders staat error_log helemaal vol)
Deze heb ik geupload naar een webserver (dsserver.net63.net). Als ik hem in de browser intyp (dsserver.net63.net/Server.php) dan krijg ik dit:
socket ok
socket number: Resource id #8
bind ok
listening...
PHP Error Message
Warning: socket_select(): supplied argument is not a valid Socket resource in /home/a2404375/public_html/Server.php on line 77
Free Web Hosting
no changes
Uiteindelijk geeft socket_select dus geen 'false' terug. Dat zou betekenen dat hij het toch doet...
Hoe los ik deze waarschuwing op? maakt het überhaupt iets uit voor de werking van de server?
Alvast bedankt.
Ik probeer al een tijdje een werkende socketserver te maken. Eerst heb ik er eentje in C gemaakt (die werkte), maar ons netwerk is daar blijkbaar niet erg geschikt voor. Dus heb ik hem (met een tutorial PHP) geconverteerd naar een PHP bestandje:
Code:
<html>
<?php
$Port = 50505;
$MaxData = 16;
function printos($text) {
echo $text;
error_log($text,0);
}
$AllDS = array_fill(0,4,123);
$ReadDS = array_fill(0,4,123);
$WriteDS = NULL;
$ExceptDS = NULL;
$players = 0;
$eigensocket = 0;
$buffersocket = 0;
$buffer = array_fill(0,$MaxData,0);
$err = 0;
$grootstesocket = 0;
$socketnumber = 0;
function stop() {
while(true);
}
function fd_set($sock, $sockarr) {
$sockarr[$socketnumber] = $sock;
$socketnumber++;
}
function fd_isset($sock, $sockarr) {
$i = 0;
$rv = false;
for ($i=0;$i<$socketnumber;$i++) {
if ($sockarr[i] == $sock) $rv = true;
}
return $rv;
}
function fd_clr($sock, $sockarr) {
$i = 0;
for ($i=0;$i<$socketnumber && $sockarr[i]!=$sock;$i++);
while ($i<$socketnumber) {
$sockarr[i] = $sockarr[i+1];
}
$sockarr[$socketnumber] = -1;
$socketnumber--;
}
$eigensocket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
socket_set_block($eigensocket);
if ($eigensocket == false) {
printos("socket_create error <br>" . socket_last_error() . "<br>");
}else{
printos("socket ok<br>socket number: " . $eigensocket . "<br>");
}
$err = socket_bind($eigensocket,"127.0.0.1",$Port);
if ($err == false) {
printos("socket_bind error <br>" . socket_last_error() . "<br>");
}else{
printos("bind ok<br>");
}
$err = socket_listen($eigensocket, 10);
if ($err == false) {
printos("socket_listen error <br>" . socket_last_error() . "<br>");
}else{
printos("listening...<br>");
}
fd_set($eigensocket, $AllDS);
$grootstesocket = $eigensocket;
while (true) {
$ReadDS = array($eigensocket,$AllDS[1],$AllDS[2]);
$err2 = socket_select($ReadDS,$WriteDS=NULL,$ExceptDS=NULL,4);
if (false === $err2) {
printos("socket_select error<br>" . socket_last_error() . "<br>");
break;
}else if ($err2 > 0) {
printos("ok");
break;
if (fd_isset($eigensocket, $ReadDS)) {
$buffersocket = socket_accept($eigensocket);
if ($buffersocket == false) {
printos("socket_accept error<br>" . socket_last_error() . "<br>");
}else{
printos("connected<br>");
$players++;
printos("players: " . $players . "<br>");
fd_set($buffersocket, $AllDS);
if ($buffersocket>$grootstesocket) $grootstesocket = $buffersocket;
}
}
for($i=0;$i<=$grootstesocket;$i++) {
if ($players == 1 && $i != $eigensocket && fd_isset($i, $AllDS)) {
socket_send($i,$buffer,1,0);
}
if (fd_isset($i, $ReadDS) && $i != $eigensocket) {
printos("receiving...<br>");
$aantalbytes = socket_recv($i,$buffer,$MaxData,0);
if ($aantalbytes <= 0) {
printos(socket_last_error() . "caused the server to disconnect<br>");
socket_close($i);
fd_clr($i,$AllDS);
$players--;
printos($players);
}else{
printos("received " . $aantalbytes . " bytes<br>");
$buffer[$MaxData-1] = $players;
for ($j=0;$j<$grootstesocket;$j++) {
if ($j!=$i && $j!=$eigensocket && fd_isset($j,$AllDS)) {
socket_send($j, $buffer, $MaxData, 0);
}
}
}
}
}
}else{
printos("no changes");
break;
}
}
?>
</html>
Deze heb ik geupload naar een webserver (dsserver.net63.net). Als ik hem in de browser intyp (dsserver.net63.net/Server.php) dan krijg ik dit:
socket ok
socket number: Resource id #8
bind ok
listening...
PHP Error Message
Warning: socket_select(): supplied argument is not a valid Socket resource in /home/a2404375/public_html/Server.php on line 77
Free Web Hosting
no changes
Uiteindelijk geeft socket_select dus geen 'false' terug. Dat zou betekenen dat hij het toch doet...
Hoe los ik deze waarschuwing op? maakt het überhaupt iets uit voor de werking van de server?
Alvast bedankt.