2016-12-08 4 views
0

Ich führe die server.php aus und starte client.php und diese Warnung wird auf dem Client angezeigt. PHP-Bildschirm nach mehreren versuchen, vom Client an den Server zu senden.PHP-Socket: Verbindung nicht möglich [10048]: Normalerweise ist nur eine Verwendung jeder Socket-Adresse (Protokoll/Netzwerkadresse/Port) zulässig

Warnung: socket_connect(): Verbindung nicht möglich [10048]: Normalerweise ist nur eine Verwendung jeder Socket-Adresse (Protokoll/Netzwerkadresse/Port) zulässig. in C: \ xampp \ htdocs \ client.php in Zeile 32 Socket Verbindung fehlgeschlagen!

Danach hörte xampp auf zu arbeiten.

Hier ist server.php

<!DOCTYPE html> 
<html> 
<?php 
    error_reporting(0); 
    set_time_limit(0); 
    ob_implicit_flush(); 
    $host = "127.0.0.1"; 
    $port = 65535; 
    echo "Waiting for connections... \n"; 
    $socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n"); 

    $result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n"); 

    $result = socket_listen($socket) or die("Could not set up socket listener\n"); 

    while(1){ 
    $spawn[++$i] = socket_accept($socket) or die("Could not accept incoming connection\n"); 
    echo "\n"; 
    $input = socket_read($spawn[$i],1024); 
    $client = $input; 

    echo $client ."\n"; 

    socket_close($spawn[$i]); 
    echo "\n"; 

    } 
socket_close($socket); 
?> 
</html> 

Hier mein client.php ist

<!DOCTYPE html> 
<html> 
<body> 
<form method="post" action="client.php"> 
<p><h4><label>Type Your Message Here:<input name = "message" size = "25" maxlength = "30" required></label></h4></p> 
<input type="submit" name="sendmsg" class="btn btn-primary" value="send message"/> 
</form> 
<?php 
$user="abc"; 
if(empty($_POST)){ 

} 
elseif(isset($_POST['sendmsg'])) { 
    $message =$_POST["message"]; 

while(1){ 

if($message=='q') { exit; } 
$socket= socket_create(AF_INET,SOCK_STREAM,SOL_TCP); 
    if($socket===false) 
    { 
     echo "Socket creation failed!"; 
    } 
$result = socket_connect($socket,"127.0.0.1",65535); 
if($result===false) 
{ 
    echo "Socket connection failed!"; 
} 
    else { 
     if($message !='0'){ 
     socket_write($socket,"$user says --> $message",1024); 
     $message='0'; 
     } 

    } 
    socket_close($socket); 
} 

} 
?> 

</body> 

</html> 

Antwort

0

Sie sind ständig zu schaffen, Verbindungs- und Steckdosen zu schließen, in der while(1) mit minimaler Verzögerung zwischen ihnen. Es ist wahrscheinlich, dass Sie alle verfügbaren Ports wie den ursprünglichen Endpunkt verbrauchen, da das Schließen des Sockels einige Zeit dauern würde.

Meinst du nur eine Verbindung zu erstellen, wenn die Seite POST ed mit einer neuen Nachricht ist?

+0

Sobald der Client mit dem Server verbunden ist, muss der Server wissen, wer der Client ist. Danach muss ich eine Nachricht an alle Clients senden, die mit dem Server verbunden sind. Bedeutet das, dass ich eine Verbindung zwischen Server und Client herstellen muss? – Emanon

+0

Wenn Sie dies über einen Browser ausführen möchten, könnten Sie etwas wie WebSockets (https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API) betrachten, das eine Verbindung zwischen aktivem Javascript-Code aufrechterhält auf dem Browser und dem Server. Sonst könnte man mit langem Polling schauen (siehe http://stackoverflow.com/questions/333664/how-do-i-implement-basic-long-polling). – msbit

+0

Ich hatte versucht mit Port größer als 65530 und es funktioniert für das Senden an den Server. Jetzt muss ich dem Server eine Antwort an alle Clients senden lassen, die mit dem Server verbunden sind. Gibt es dafür eine Lösung? Es wird sehr hilfreich sein, wenn es welche gibt. Übrigens, vielen Dank. =) – Emanon

Verwandte Themen