A question about UDP packet receive

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View
Hi, everyone.
  I need your help!
  I created a UDP server by using  $socket =
stream_socket_server($udpAddr, $errno, $errstr, STREAM_SERVER_BIND);
  the client send me a reqest, then server return a "hello string".
  but the client simply send me a name or something very short. I have
to read upto 100 chars, then the fread can return.

my Question is: how can I read a udp packet which length is unknow?

thank a lot!

my src code:=====================================
    $pkt = stream_socket_recvfrom($socket, 100, 0, $peer);

    $reciv_data = fread($socket, 100);
    $message = preg_replace("/[[:space:]]/", '', $reciv_data); // cleanup
    $response = "hello, $message";
    stream_socket_sendto($socket, $response, 0, $peer);

    echo "   In > [$message]  \n";
    echo "  Out > [$response] \n";

Re: A question about UDP packet receive

Reeze wrote:

Quoted text here. Click to load it

Guess what: fread() returns when it has read as many characters as
requested, OR when it hits an end-of-file.

And, guess what: when the server closes the connection, that is interpreted
as an end-of-file.

You should be able to work out the solution with this info. Alternatively,
RTFM: http://php.net/stream_get_contents

Iván Sánchez Ortega -ivan-algarroba-sanchezortega-punto-es-

You fill a much-needed gap.

Re: A question about UDP packet receive

Quoted text here. Click to load it

I suggest that you use EITHER stream_socket_recvfrom OR fread.  Both serve
the same purpose in this case, but fread adds another level of buffering.
It doesn't sound like you really want the buffering.
Tim Roberts, timr@probo.com
Providenza & Boekelheide, Inc.

Site Timeline