[PHP] UDP socket, kan geen data zenden

Pagina: 1
Acties:
  • 1.212 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • gertjuhh
  • Registratie: April 2004
  • Laatst online: 26-04 09:14
[update]
Het zenden van de data is reeds gelukt, nu echter nog een probleem bij het lezen. Zie mijn 2e post voor meer info
[/update]


Heren/Dames,

ik heb een poging gedaan om een UDP socket te maken om wat data naar een server te kunnen sturen.
Nu krijg ik alleen de volgende foutmelding en ik heb echt totaal geen idee wat ik hier mee aan moet:

Warning: socket_send(): unable to write to socket [0]: The attempted operation is not supported for the type of object referenced.

Dit komt van de socket error af (niet echt nuttig dus...):
socket_send error: The attempted operation is not supported for the type of object referenced.

Als iemand mij zou kunnen verder helpen zou dit zeer op prijs worden gesteld!

Alvast bedankt voor de moeite.
Mvg,
Geert

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php

    $host = '81.171.85.11';
    $port = 27015;
    
    $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP) or die('socket create error: '.socket_strerror(socket_last_error()));

    socket_bind($socket,'10.53.171.15',$port) or die('socket_bind error: '.socket_strerror(socket_last_error()));
    
    socket_connect($socket,$host,$port) or die('socket_connect error: '.socket_strerror(socket_last_error()));

    $packet = chr(255).chr(255).chr(255).chr(255)."challange rcon\n";
   
    socket_send($socket, $packet, strlen($packet), "0x100") or die('socket_send error: '.socket_strerror(socket_last_error()));

?>

[ Voor 10% gewijzigd door gertjuhh op 23-05-2006 11:20 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Mag de pc uberhaupt connecten via die poort? heb je dat al getest.

Acties:
  • 0 Henk 'm!

  • gertjuhh
  • Registratie: April 2004
  • Laatst online: 26-04 09:14
Ja ik mag gewoon connecten naar die port, sterker nog, na een nachtje puzzelen ben ik weer een stap verder en het zenden werkt nu gewoon.
Nu heb ik alleen (naar mijn mening heel raar) probleem tijdens het lezen van de response van de server.

Hier de geupdate code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php

    $host = '81.171.85.11';
    $port = 27015;
    
    $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP) or die('socket create error: '.socket_strerror(socket_last_error()));

    socket_bind($socket,'0.0.0.0',$port) or die('socket_bind error: '.socket_strerror(socket_last_error()));
    
    socket_connect($socket,$host,$port) or die('socket_connect error: '.socket_strerror(socket_last_error()));

    $packet = chr(255).chr(255).chr(255).chr(255)."challange rcon";
    echo 'packet string: '.$packet."\r\n";
    echo 'packet length: '.strlen($packet)."\r\n";
   
    $send = socket_write($socket, $packet, strlen($packet)) or die('socket_send error: '.socket_strerror(socket_last_error()));
    echo $send." bytes send\r\n";
    
    $string = socket_read($socket, 1024, PHP_NORMAL_READ);
    if ($string === FALSE)
        die('socket_read error: '.socket_strerror(socket_last_error()));
    else 
        echo 'String: '.$string."\n";
        
?>


Nu krijg ik deze foutmelding:
Warning: socket_read(): unable to read from socket [0]: The operation completed successfully.

En dit komt van de socket_error (wederom nutteloos)
socket_read error: The operation completed successfully.

Acties:
  • 0 Henk 'm!

Verwijderd

1. $string === FALSE? Ik hou sowieso niet van untyped variables, maar === is één, en kijken of een string False is is twee wat mij niet helemaal lekker lijkt :)
2. Is het niet een beter idee om eerst socket_last_error uit te lezen? Als deze 0 is dan is het gelukt.
3. Challenge schrijf je zo ;)

[ Voor 6% gewijzigd door Verwijderd op 23-05-2006 11:49 ]


Acties:
  • 0 Henk 'm!

  • gertjuhh
  • Registratie: April 2004
  • Laatst online: 26-04 09:14
socket_read kan ook 0 terug geven als er niks is gelezen maar wel met success is uitgevoerd, en als je met == vergelijkt word 0 gezien als false wat niet de bedoeling is.
vandaar de === die ook op type controleerd (dit word ook aangeraden in de manual van socket_read op php.net)
de 'die' word dus alleen aangeroepen als het socket_read 'bool(false)' terug geeft (var_dump geeft dit ook terug)

verder bedankt voor de spellings controle ;) totaal over het hoofd gezien