Проблема с сокетами PHP - PullRequest
       3

Проблема с сокетами PHP

0 голосов
/ 02 декабря 2010

Эй, ребята, я пытаюсь выполнить программирование сокетов на PHP.

Итак, я запускаю сокет "сервер":

$address = '127.0.0.1';
$port = '9999';

$masterSocket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($masterSocket, SOL_SOCKET, SO_REUSEADDR, 1);
socket_bind($masterSocket, $address, $port);
socket_listen($masterSocket, 5);
$clientSocket = socket_accept($masterSocket);

Итак, я открываю SSH и запускаю этоскрипт.Он работает, без ошибок.

Затем у меня есть другой скрипт PHP, который пытается подключиться к этому:

$fp = fsockopen("me.com", 9999, $errno, $errstr, 30);

fclose($fp);

, но он дает мне:

Warning: fsockopen(): unable to connect to me.com:9999 (Connection refused)

Какначать исправлять это?

Ответы [ 4 ]

0 голосов
/ 26 октября 2014

Я знаю, что вопрос очень старый, но если у кого-то все еще есть эта проблема, убедитесь, что вы подключаетесь к адресу ЖЕ , который вы слушаете,

Например, если вы 'Если вы прослушиваете 127.0.0.1 и ваш машинный адрес равен me.com, вы не сможете подключиться к me.com с ним, для этого вам придется прослушивать me.com.

Listening on: localhost:8088
Can only connect via: localhost:8088 // not via me.com:8088

Listening on: me.com:8088
Can only connect via: me.com:8088 // not via localhost:8088
0 голосов
/ 02 декабря 2010

1) Проверьте, не отключен ли порт.Вы можете использовать telnet для проверки этого.

2) Посмотрите, работает ли он, когда клиент и сервер находятся на одной машине (я предполагаю, что вы упомянули SSH, что сервер удаленный).

3) Если он работает локально, и вы можете подключиться к удаленному порту, используя другие инструменты, то это будет сложно.Я бы посоветовал вам вопить и скрежетать зубами;У меня нет идей.

РЕДАКТИРОВАТЬ: Хех.Или вы можете просто прочитать ответ Стива.Скрежет зубами по-прежнему возможен.

0 голосов
/ 02 декабря 2010

Я знаю, что вы сказали, что "me.com" является примером, но, чтобы быть уверенным, socket_bind ожидает IP-адрес.

С http://php.net/manual/en/function.socket-bind.php:

адрес

Если розетка имеет Семейство AF_INET, адрес IP в точечно-четырехзначной записи (например, 127.0.0.1).

Если сокет имеет AF_UNIX семья, адрес является путем Сокет Unix-домена (например, /tmp/my.sock).

0 голосов
/ 02 декабря 2010

Вы не завершили последовательность сокетов прослушивания, вам нужно позвонить socket_accept, чтобы принять новые подключения. В комментариях к документации по PHP приведен пример.

$clients = array();
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
socket_bind($socket,'127.0.0.1',$port);
socket_listen($socket);
socket_set_nonblock($socket);

while(true)
{
    if(($newc = socket_accept($socket)) !== false)
    {
        echo "Client $newc has connected\n";
        $clients[] = $newc;
    }
}

http://php.net/manual/en/function.socket-accept.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...