код подключения сокета php - PullRequest
1 голос
/ 19 мая 2011

Я пишу простой код сокета php.
Вот мой код

 <?php

    $address="127.0.0.1";
    $port=9875;
    echo "I am here";

    if(false==($socket=  socket_create(AF_INET,SOCK_STREAM, SOL_TCP)))
    {
        echo "could not create socket";
    }
    socket_bind($socket, $address, $port) or die ("could not bind socket");
    socket_listen($socket);
    if(($client=socket_accept($socket)))
        echo "client is here";

    ?>

когда я запускаю эту программу, мой браузер показывает только ожидание localhost.
Есть ли проблема в моем коде?
Я использую xammp 1.7.4.
Еще одна вещь, которую я хочу знать, если я хочу получить HTTP или FTP-запрос, мне нужно изменить только номер порта?

Ответы [ 2 ]

6 голосов
/ 20 мая 2011

Я проверил код и протестировал в моей системе, и он работает правильно. Отображается как «клиент здесь» после запуска клиента.

Имя файла: server.php

<?php
    $address="127.0.0.1";
    $port=9875;
    echo "I am here";
    set_time_limit (0); 
    if(false==($socket=  socket_create(AF_INET,SOCK_STREAM, SOL_TCP)))
    {
        echo "could not create socket";
    }
    socket_bind($socket, $address, $port) or die ("could not bind socket");
    socket_listen($socket);
    if(($client=socket_accept($socket)))
        echo "client is here";

    socket_close($socket); 
    ?>

Сначала запустите файл server.php.

Файл: client.php

<?php
$host="127.0.0.1" ;
$port=9875;
$timeout=30;
$sk=fsockopen($host,$port,$errnum,$errstr,$timeout) ;
if (!is_resource($sk)) {
    exit("connection fail: ".$errnum." ".$errstr) ;
} else {

    echo "Connected";
    }
?>

Теперь запустите client.php

Ваш вывод должен быть таким (как я получил в моей системе)

Я здесь, клиент здесь

Если нет, убедитесь, что ваш брандмауэр не блокирует запрос. Временно отключите антивирус, если он у вас есть.

3 голосов
/ 19 мая 2011

Это ожидаемое поведение ожидания. Написанная вами программа является сервером сокетов, который готов прослушивать соединение с указанным портом, пока не будет ожидать.

Вы можете создать клиент, который подключается так, что вы увидите ответ «Клиент здесь». Клиент может быть любым языком программирования, включая PHP.

Ниже приведен пример кода на PHP (я его не проверял).

$fp = stream_socket_client("127.0.0.1:9875", $errno, $errstr);

if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
   // Handle code here for reading/writing
}

Вы можете проверить эту ссылку для примера клиентского кода на PHP.

EDIT

$host = "127.0.0.1";
$port = 9875;
$timeout = 30;
$sk = fsockopen($host, $port, $errnum, $errstr, $timeout);
if (!is_resource($sk)) {
    exit("connection fail: " . $errnum . " " . $errstr);
} else {
    echo "Connected";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...