How to do NAT with PHP sockets -


i'm trying make peer peer app in php work in same kind of way skype works. works internal addresses, when try send data external address message never gets there. i'm missing address translation, i'm @ loss how php sockets. possible?

this code have @ moment receive message, run first wait message:

<?php $socket = socket_create(af_inet, sock_dgram, sol_udp) or die("could not create socket: " . socket_strerror(socket_last_error($socket))); socket_bind($socket, "0.0.0.0", 100) or die("could not bind socket: " . socket_strerror(socket_last_error($socket)));  $ret = ""; $from_ip = ""; $from_port = 0;   echo "waiting...\n"; socket_recvfrom($socket, $ret, 6, 0, $from_ip, $from_port);  var_dump($ret, $from_ip, $from_port);  socket_close($socket); 

and when waiting, run code send message:

<?php $socket = socket_create(af_inet, sock_dgram, sol_udp) or die("could not create socket: " . socket_strerror(socket_last_error($socket)));   $to_ip = "externalip"; //works internal "127.0.0.1"; $to_port = 100; $message = "hello!";  socket_sendto($socket, $message, strlen($message), 0, $to_ip, $to_port); echo "sent\n";  socket_close($socket); 

but sends , exits, first script still waiting... been @ while now, can me out?

-- edit --

ok i've implemented stun server , set port forwarding so:

<?php  echo "-- stun server --\n";  $socket = socket_create(af_inet, sock_dgram, sol_udp) or die("could not create socket: " . socket_strerror(socket_last_error($socket))); socket_bind($socket, "0.0.0.0", 5104) or die("could not bind socket: " . socket_strerror(socket_last_error($socket)));   {     $ret = "";     $from = "";     $port = 0;      echo "waiting...\n";     socket_recvfrom($socket, $ret, 6, 0, $from, $port);      echo "received: $ret\n";      $message = $from.":".$port;     socket_sendto($socket, $message, strlen($message), 0, $from, $port);     echo "sent: $message\n\n"; } while (true); 

and changed first script ip/port stun server:

<?php $socket = socket_create(af_inet, sock_dgram, sol_udp) or die("could not create socket: " . socket_strerror(socket_last_error($socket))); socket_bind($socket, "0.0.0.0", 100) or die("could not bind socket: " . socket_strerror(socket_last_error($socket)));  $ret = ""; $from = ""; $port = 0;   echo "sending info stun server...\n"; $to_ip = "stunip"; $to_port = 5104; $message = "get_ip"; socket_sendto($socket, $message, strlen($message), 0, $to_ip, $to_port);  echo "waiting stun...\n"; $stuninfo = ""; socket_recvfrom($socket, $stuninfo, 25, 0, $from, $port);  var_dump($stuninfo); // use info in second script   echo "waiting...\n"; socket_recvfrom($socket, $ret, 6, 0, $from, $port);  var_dump($ret, $from, $port);  socket_close($socket); 

it gets info stun server ok , waits connection, when use info in second script, first script still doesn't receive message.. there step i'm missing?


Comments

Popular posts from this blog

PHPMotion implementation - URL based videos (Hosted on separate location) -

javascript - Using Windows Media Player as video fallback for video tag -

c# - Unity IoC Lifetime per HttpRequest for UserStore -