2013-02-23 4 views
3

Я пытаюсь создать сервер веб-Socket для небольшого проекта, над которым я работаю.socket_bind() не удалось связать адрес

Я настроил сервер (расположенный в доме) и порт пересылается 80 и 22. Я прочитал этот учебник: here

И всякий раз, когда я 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"; 

Кто-нибудь есть какие-либо предложения, почему это не позволяет мне установить соединение?

+0

Из того, что я знаю, вам не нужен этот 'server/startDaemon.php' – Dharman

+0

@Dharman Как это понимать? Как сервер начнет тогда? Потому что в клиенте 'var socket = new WebSocket (host)' все еще требует хост] – Phorce

+0

'ws: // MY_IP_NOT_LAN: 8000', которого достаточно, чтобы получить соединение. Однако это не решит вашу проблему, ее серверная сторона – Dharman

ответ

5

Я предполагаю, что проблема на сервере Linux.

Запустите команду netstat -a -p -n под root (например, с помощью sudo), чтобы понять, какой процесс использует этот порт. Затем, возможно, сделайте setsockopt(2) с SO_REUSEADDR (см. socket(7) для получения дополнительной информации).

Протокол TCP имеет определенные задержки в минутах (например, keepalive и т. Д. И т. Д.). См. tcp(7)

Я предлагаю прочитать хорошую книгу по системному программированию Linux, например Advanced Linux Programming и, возможно, некоторые материалы по сетевому программированию.

3

Вы можете повторно использовать адрес, используя настройки ниже:

if (! socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1)) 
{ 
    echo socket_strerror(socket_last_error($sock)); 
    exit; 
} 
1

Другого приложение уже использует порт, который вы пытаетесь use.You может запустить

lsof -i:port_no 

сделать порт бесплатно ,

Смежные вопросы