我用php实现socket编程服务器端出现报错:
Warning: socket_bind() [function.socket-bind]: unable to bind address [0]: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 in C:\wamp\www\socket.php on line 25
socket_bind() 失败的原因是:通常每个套接字地址(协议/网络地址/端口)只允许使用一次。客户机端出现报错:
Warning: socket_read() [function.socket-read]: unable to read from socket [0]: 远程主机强迫关闭了一个现有的连接。 in C:\wamp\www\client.php on line 17 请教各位大神这是什么问题!!

解决方案 »

  1.   

    客户端代码:
    <?php  
      
    set_time_limit(0);  
      
    $host = "127.0.0.1";  
    $port = 12001;  
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)or die("Could not create  socket\n"); // 创建一个Socket  
       
    $connection = socket_connect($socket, $host, $port) or die("Could not connet server\n");    //  连接  
    socket_write($socket, "hello socket") or die("Write failed\n"); // 数据传送 向服务器发送消息  
    while ($buff = socket_read($socket, 1024, PHP_NORMAL_READ)) {  
        echo("Response was:" . $buff . "\n");  
    }  
    socket_close($socket); 
    ?>
      

  2.   

    服务器端代码:
    <?php  
       
    set_time_limit(0);  
     
    $address = "127.0.0.1";  
    $port = 12001;     
    $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("socket_create() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");  
      
    socket_set_block($sock) or die("socket_set_block() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");  
      
    $result = socket_bind($sock, $address, $port) or die("socket_bind() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");  
      
    $result = socket_listen($sock, 4) or die("socket_listen() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");  
    echo "OK\nBinding the socket on $address:$port ... ";  
    echo "OK\nNow ready to accept connections.\nListening on the socket ... \n";  
    do { // never stop the daemon  
          
        $msgsock = socket_accept($sock) or  die("socket_accept() failed: reason: " . socket_strerror(socket_last_error()) . "/n");  
               
        echo "Read client data \n";   
        $buf = socket_read($msgsock, 8192);  
        echo "Received msg: $buf   \n";        
         
        $msg = "welcome \n";  
        socket_write($msgsock, $msg.$buf, strlen($msg)) or die("socket_write() failed: reason: " . socket_strerror(socket_last_error()) ."/n");    
        socket_close($msgsock);  
    } while (true);  
    socket_close($sock);  
    ?>
      

  3.   

    这个不懂,帮你顶下
    我试过用php搞socket,需要多线程 线程池什么的  php不好搞,换java了
      

  4.   

    需要在bind之前设置set_sockopt(SOL_SOCKET, SO_REUSEADDR);端口重用,否则上一次bind的端口关闭以后处于time_wait无法再次bind。