Re: Subject: UDP packet
| From: | Neil Smith | Date: | Thu, 02 Jan 2003 10:45:59 +0000 |
| Subject: | Re: Subject: UDP packet | ||
| References: | 1 | Groups: | php.windows |
| Request: | Send a blank email to php-windows+get-17615@lists.php.net to get a copy of this message | ||
Since you are getting some data back from the server when connecting in this manner, everything seems to be okay. However - remember that UDP is a connectionless protocol (unlike TCP which has a form of packet accounting), you may not *necessarily* get all the packets delivered which may impact finding an EOF sequence.
You may need to set a socket timeout value (use socket_set_timeout() or stream_set_timeout() with something reasonable, say 1 second) which continues the script if no more data is being received. Read more about this here :
http://www.php.net/manual/en/function.fsockopen.php and
http://www.php.net/manual/en/function.socket-set-timeout.php
I have also verified that some versions of PHP (<4.2) will hang up a script (up to the script timeout) if a packet request is blocked by a firewall on the other end.
You can read more about this in a bug report submitted in February.
http://bugs.php.net/bug.php?id=15639
Hope it works out.
Regards,
Neil Smith.
At 08:04 02/01/2003 +0000, you wrote:
Message-ID: <20030101163349.4822.qmail@pb1.pair.com> To: php-windows@lists.php.net Reply-To: "Torben Dehn" <news@dehn.net> From: "Torben Dehn" <news@dehn.net> Date: Wed, 1 Jan 2003 17:34:05 +0100 Subject: UDP packet Hello ! I am very new to PHP so please don't laugh if my code really sucks ;=) What i am trying to do is : 1) Opening an UDP connectión to a server (That works allright) 2) Making a query to the server (That works allright) 3) Recieve an unknow number of UDP packets with an unknown packet size (This is my problem) I don't know the packet size and i don't know how many packets the server will return... Take a look at the WHILE loop because thats where it "hangs". If i remove the WHILE loop and just make a fread($socket,1024) it will return some data. My questions are as follow : 1) How can i make sure that ALL data has been recieved ? 2) Is it possible to read each UDP packet into it's own variable (array) ??? I would be very happy if someone could answer one or all question. <?$ip = "192.246.40.65"; $port = 27950;$command = "ÿÿÿÿgetservers 60 empty full";$data = '';Echo "Connecting to Master Server : $ip:$port<br>"; $socket = fsockopen("udp://$ip",$port,$errno,$errstr,2); if (!$socket) { echo "There was an error connecting to the Master Server<br>"; echo "Error returned was : $errorno and $errostr"; exit; } //Socket error else { echo "Connection established ..<br>"; If (!fwrite($socket,$command)) {echo "There was an error querying the master server .."; exit;} //Fwrite error echo "Query complete ..<br>"; while (!feof($socket)) {echo "Reading data ..<br>"; $data .= fread($socket,4096);} //End of read section echo "$data<br>"; fclose($socket); echo "Connection closed ..<br>"; } //End of main loop ?>