无法绑定地址 [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)
Python随心记--python之错误:OSError: [WinError 10048]