2017-07-20 3 views
0

Ich erstelle ein UDP-Sockets verwenden:Wie finde ich den lokalen Port eines Sockets in PHP?

$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); 

Wenn ich socket_getsockname die Socket-Namen zu erhalten:

/** 
    * Get Source port (Refactored to allow unit testing) 
    * 
    * @return string 
    */ 
    private static function getSourcePort($sock) 
    { 
     $addr = null; 
     $port = null; 
     socket_getsockname($sock, $addr, $port); 
     return $port; 
    } 

Der Hafen zurückgekehrt ist immer 0 und Adr ist 0.0.0.0

Wie bekomme ich den gebundenen Port richtig?

+0

Mögliches Duplikat [Sockets, PHP, lokal Port] (https://stackoverflow.com/questions/21640660/sockets-php-local-port) – Dalton

+0

Hier ist der zurückgegebene Port immer 0 und die Adresse ist 0.0.0.0 – ssk

+1

Nun ja, Sie erstellen den Socket, aber Sie verbinden es nicht: 'socket_connect ($ sock, $ server_ip_here, $ port_here)' '; Danach sollte es die korrekte IP und Port zurückgeben. – icecub

Antwort

1

Binden die Buchse nach der Erstellung des Problem behoben:

if (socket_bind($sock, $sourceIp) === false) 
{ 
    $failReason = "socket_bind() failed: reason: " . socket_strerror(socket_last_error()); 
} 

// get the source port 
$sourcePort = 0; 
if (socket_getsockname($sock, $sourceIp, $sourcePort) === false) 
{ 
    $failReason = "socket_getsockname() failed: reason: " . socket_strerror(socket_last_error()); 
} 
Verwandte Themen