user11
user11

Reputation: 35

udp socket programming in php

I'm trying to run a udp socket on windows cmd..here's my server script..

<?php

error_reporting(~E_WARNING);

if(!($sock = socket_create(AF_INET, SOCK_DGRAM, 0)))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);

die("Couldn't create socket: [$errorcode] $errormsg \n");
}

echo "Socket created \n";

// Bind the source address
if( !socket_bind($sock, '0.0.0.0' , 80) )
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);

die("Could not bind socket : [$errorcode] $errormsg \n");
}

echo "Socket bind OK \n";

while(1)
{
echo "Waiting for data ... \n";

//Receive some data
$r = socket_recvfrom($sock, $buf, 512, 0, $remote_ip, $remote_port);
echo "$remote_ip : $remote_port -- " . $buf;

//Send back the data to the client
socket_sendto($sock, "OK " . $buf , 100 , 0 , $remote_ip , $remote_port);
}

socket_close($sock);

I get a response on running the above script that reads as follows:

Socket created 
Socket bind OK 
Waiting for data ...

Below is my client script..

<?php

error_reporting(~E_WARNING);
$server = '127.0.0.1';
$port = 9999;

if(!($sock = socket_create(AF_INET, SOCK_DGRAM, 0)))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);

die("Couldn't create socket: [$errorcode] $errormsg \n");
}

echo "Socket created \n";

while(1)
{
//Take some input to send
echo 'Enter a message to send : ';
$input = fgets(STDIN);

//Send the message to the server
if( ! socket_sendto($sock, $input , strlen($input) , 0 , $server , $port))
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);

    die("Could not send data: [$errorcode] $errormsg \n");
}

//Now receive reply from server and print it
if(socket_recv ( $sock , $reply , 2045 , MSG_WAITALL ) === FALSE)
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);

    die("Could not receive data: [$errorcode] $errormsg \n");
}

echo "Reply : $reply";
}

On running the above socket, i get the following output..

Socket created
Enter a message to send:[random input]
Could not receive data:[0] The operation completed successfully

What's causing this?..after i enter some input, the last line above is displayed instead of 'Reply : [random input]'

Thanks in advance

Upvotes: 1

Views: 3170

Answers (1)

mgms_kumara
mgms_kumara

Reputation: 41

use this flag "MSG_PEEK" instead of "MSG_WAITALL" in socket_recv function. Thank you.

Upvotes: 1

Related Questions