English 中文(简体)
socket_bind() : Only one usage of each socket address (protocol/network address/port) is normally permitted in php
原标题:

I have copied Client/Server Socket Program from the following source

http://www.php.net/manual/en/sockets.examples.php

but when i run it in my browser it gives following error message:

socket_bind() reason: Only one usage of each socket address (protocol/network address/port) is normally permitted.

I have searched and tried different solutions but was unable to found the solution. Please help My code is below.

Server.php

<?php
error_reporting(E_ALL);

/* Permitir al script esperar para conexiones. */
//set_time_limit(0);

/* Activar el volcado de salida implícito, así veremos lo que estamo obteniendo
* mientras llega. */
ob_implicit_flush();

$address =  127.0.0.1 ;
$port = 9500;

if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
    echo "socket_create() falló: razón: " . socket_strerror(socket_last_error()) . "
";
}

if (socket_bind($sock, $address, $port) === false) {
    echo "socket_bind() falló: razón: " . socket_strerror(socket_last_error($sock)) . "
";
}

if (socket_listen($sock, 5) === false) {
    echo "socket_listen() falló: razón: " . socket_strerror(socket_last_error($sock)) . "
";
}

//clients array
$clients = array();

do {
    $read = array();
    $read[] = $sock;

    $read = array_merge($read,$clients);

    // Set up a blocking call to socket_select
    if(socket_select($read,$write = NULL, $except = NULL, $tv_sec = 5) < 1)
    {
        //    SocketServer::debug("Problem blocking socket_select?");
        continue;
    }

    // Handle new Connections
    if (in_array($sock, $read)) {        

        if (($msgsock = socket_accept($sock)) === false) {
            echo "socket_accept() falló: razón: " . socket_strerror(socket_last_error($sock)) . "
";
            break;
        }
        $clients[] = $msgsock;
        $key = array_keys($clients, $msgsock);
        /* Enviar instrucciones. */
        $msg = "
Bienvenido al Servidor De Prueba de PHP. 
" .
        "Usted es el cliente numero: {$key[0]}
" .
        "Para salir, escriba  quit . Para cerrar el servidor escriba  shutdown .
";
        socket_write($msgsock, $msg, strlen($msg));

    }

    // Handle Input
    foreach ($clients as $key => $client) { // for each client        
        if (in_array($client, $read)) {
            if (false === ($buf = socket_read($client, 2048, PHP_NORMAL_READ))) {
                echo "socket_read() falló: razón: " . socket_strerror(socket_last_error($client)) . "
";
                break 2;
            }
            if (!$buf = trim($buf)) {
                continue;
            }
            if ($buf ==  quit ) {
                unset($clients[$key]);
                socket_close($client);
                break;
            }
            if ($buf ==  shutdown ) {
                socket_close($client);
                break 2;
            }
            $talkback = "Cliente {$key}: Usted dijo  $buf .
";
            socket_write($client, $talkback, strlen($talkback));
            echo "$buf
";
        }

    }        
} while (true);

socket_close($sock);
?>

Client.php

<?php
//error_reporting(E_ALL);

echo "<h2>TCP/IP Connection</h2>
";

/* Get the port for the WWW service. */
//$service_port = getservbyname( www ,  tcp );
$service_port=9500;

/* Get the IP address for the target host. */

$address= 127.0.0.1 ;

/* Create a TCP/IP socket. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "
";
} else {
    echo "OK.
";
}

echo "Attempting to connect to  $address  on port  $service_port ...";
$result = socket_connect($socket, $address, $service_port);
if ($result === false) {
    echo "socket_connect() failed.
Reason: ($result) " . socket_strerror(socket_last_error($socket)) . "
";
} else {
    echo "OK.
";
}

$in = "HEAD / HTTP/1.1
";
$in .= "Host: www.example.com
";
$in .= "Connection: Close

";
$out =   ;

echo "Sending HTTP HEAD request...";
socket_write($socket, $in, strlen($in));
echo "OK.
";

echo "Reading response:

";
while ($out = socket_read($socket, 2048)) {
    echo $out;
}

echo "Closing socket...";
socket_close($socket);
echo "OK.

";
?>
问题回答

In addition to the link @Barmar posted in the comments, I found this article and this one, each of which are pointing to the possibility that you re either running out of ports or using an invalid port number.

I don t have too much experience with Windows in this regards, but that second article at least is claiming that you can either use a port in the range 1024-5000, or change a registry setting if you want to go higher. I would try setting your port to something in that range, say 4950, and see if that clears your issue up.

The registry key in question for any of those interested is HKLMSystemCurrentControlSetServicesTcpipParametersMaxUserPort and the value can go up to 65534. However, I doubt this would be a necessary step, unless you already have ~4000 other processes already running that are using up all of your available ports.





相关问题
Brute-force/DoS prevention in PHP [closed]

I am trying to write a script to prevent brute-force login attempts in a website I m building. The logic goes something like this: User sends login information. Check if username and password is ...

please can anyone check this while loop and if condition

<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...

定值美元

如何确认来自正确来源的数字。

Generating a drop down list of timezones with PHP

Most sites need some way to show the dates on the site in the users preferred timezone. Below are two lists that I found and then one method using the built in PHP DateTime class in PHP 5. I need ...

Text as watermarking in PHP

I want to create text as a watermark for an image. the water mark should have the following properties front: Impact color: white opacity: 31% Font style: regular, bold Bevel and Emboss size: 30 ...

How does php cast boolean variables?

How does php cast boolean variables? I was trying to save a boolean value to an array: $result["Users"]["is_login"] = true; but when I use debug the is_login value is blank. and when I do ...

热门标签