无法绑定地址 [10048]:每个套接字地址(协议/网络地址/端口)通常只允许使用一次

Posted

技术标签:

【中文标题】无法绑定地址 [10048]:每个套接字地址(协议/网络地址/端口)通常只允许使用一次【英文标题】:unable to bind address [10048]: Only one usage of each socket address (protocol/network address/port) is normally permitted 【发布时间】:2020-04-03 09:34:20 【问题描述】:

我是使用 php web sockets 的新手。我正在尝试实现简单的 Web 套接字,但我收到了绑定地址的错误。我尝试更改端口号,但在我的情况下不起作用。我正在我的本地机器上尝试这个。 代码如下

    <?php

$host ="localhost";
$port =12345;
set_time_limit(0);
$sock = socket_create(AF_INET,SOCK_STREAM,0) or die("Could not create socket \n");
$result_sock = socket_bind($sock,$host,$port)or die("Could not bind to socket \n");
$result_sock = socket_listen($sock,3)or die("Could not Setup socket listener \n");
echo "Listening for connections";


do

    $accept = socket_accept($sock)or die("Could not accept incoming connection \n");
    $msg = socket_read($accept,1024)or die ("Could not read input \n");

   socket_write($accept,$reply,strlen($reply)) or die ("Could not write input \n");
   $errors = array();
    // connect db
   $db= mysqli_connect('localhost','root','','color_luck_db') or die ("Could not connect to  DATABASE");
   $timer_value = "SELECT Timer_Value from gamehistory where Room_Id= '1'";
   $result_timer= mysqli_query($db,$timer_value);
   $_SESSION['timer_value']= $results;
   $result_timer=$result_timer--;

while($result_timer>0);

socket_close($accept,$sock);
 ?>

【问题讨论】:

此代码用于socket.php文件 【参考方案1】:

我有类似的问题,我从Jeff Lambert的这个答案中得到了解决方案

“我找到了this article 和this one,它们都表明您可能是端口不足或使用了无效的端口号。 在这方面,我对 Windows 没有太多经验,但第二篇文章至少声称您可以使用 1024-5000 范围内的端口,或者如果您想更高,可以更改注册表设置。我会尝试将您的端口设置为该范围内的某个值,例如 4950,看看是否可以解决您的问题。 对于任何感兴趣的人来说,有问题的注册表项是HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\MaxUserPort,该值可以上升到 65534。但是,我怀疑这将是一个必要的步骤,除非您已经有大约 4000 个其他进程已经在运行,这些进程正在耗尽所有您的可用端口。”

这是我的代码:

<?php
    $host = "localhost";
    $port = 4950;
    set_time_limit(0);
    // create socket
    $socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
    echo "Socket created successfully\n";
    // bind socket
    socket_bind($socket, $host, $port) or die("Could not bind to socket\n");
    echo "socket binding completed\n";
    // lstening on socket
    socket_listen($socket) or die("Could not set up socket listener\n");
    echo "Listening....";
    while(true)
        //accepting connection of client
        $client = socket_accept($socket) or die("Error in accepting client");
        // saying wellcome to client
        $msg = "welcome";
        socket_write($client, $msg, strlen($msg)) or die("error in ");
    
?>

【讨论】:

以上是关于无法绑定地址 [10048]:每个套接字地址(协议/网络地址/端口)通常只允许使用一次的主要内容,如果未能解决你的问题,请参考以下文章

Windows socket error: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次.(10048)

socket.error: [Errno 10048]

Python随心记--python之错误:OSError: [WinError 10048]

XAMPP apache 无法连接到监听端口

尝试使用扭曲的书中的示例代码echoserver.py连接到扭曲的服务器。获取错误无法收听多个地址

AS 实机测试 ADB.exe 提示