我正在尝试为我正在处理的一个小项目创build一个Web Socket服务器。
我已经build立了服务器(位于家中),并有端口转发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";
有没有人有任何build议,为什么这不允许我build立连接?
我猜这个问题是在Linux服务器上。
在根目录下(例如使用sudo
)运行netstat -a -p -n
命令,了解哪个进程正在使用该端口。 然后也许用SO_REUSEADDR
做一个setsockopt(2) (更多的参见socket(7) )。
TCP协议在几分钟内有一些特定的延迟(例如保持活动等等)。 参见例如tcp(7)
我建议阅读一本关于Linux系统编程的好书,比如高级Linux编程 ,也许还有一些关于网络编程的材料。
您可以使用以下设置重复使用地址:
if ( ! socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1)) { echo socket_strerror(socket_last_error($sock)); exit; }
另一个应用程序已经在使用您尝试使用的端口。您可以运行
lsof -i:port_no
使港口免费。