4

我正在尝试为我正在处理的一个小项目创建一个 Web 套接字服务器。

我已经设置了服务器(位于家里)并转发了 80 和 22 端口。我阅读了本教程:这里

每当我 ssh 进入我的服务器以运行“startDarmon.php”时,我都会收到以下错误:

PHP Warning:  socket_bind(): unable to bind address [98]: Address already in use in  
/var/www/server/socket.class.php on line 48
2013-02-23 14:15:38 System: Socket bound to localhost:8000.
2013-02-23 14:15:38 System: Start listening on Socket

这就是我认为阻止我的客户端连接到服务器的原因。所以在 startDarmon.php 文件中我有:

$WebSocket = new socketWebSocket('MY_IP_NOT_LAN_IP',8000);

在我的客户文件中,我有:

var host = "ws://MY_IP_NOT_LAN:8000/server/startDaemon.php";

有没有人对为什么这不允许我建立连接有任何建议?

4

3 回答 3

6

我猜问题出在Linux服务器上。

netstat -a -p -n在 root 下运行命令(例如使用sudo)以了解哪个进程正在使用该端口。然后也许做一个setsockopt(2)(更多SO_REUSEADDRsocket(7))。

TCP 协议在几分钟内有一些指定的延迟(例如,keepalive 等)。参见例如tcp(7)

我确实建议阅读一本关于 Linux 系统编程的好书,比如Advanced Linux Programming,也许还有一些关于网络编程的材料。

于 2013-02-23T14:26:13.573 回答
3

您可以使用以下设置重复使用地址:

if ( ! socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1)) 
{ 
    echo socket_strerror(socket_last_error($sock)); 
    exit; 
}
于 2013-11-08T09:09:02.577 回答
2

另一个应用程序已经在使用您尝试使用的端口。您可以运行

lsof -i:port_no

使端口自由。

于 2015-12-28T06:36:29.783 回答