PHP записать строку в сокет - PullRequest
1 голос
/ 17 ноября 2011

Я пытаюсь записать строку в сокет.Строка, которую я пытаюсь написать:

SET 4 1

Это моя функция, которая записывает в сокет

function write_to_socket($socket, $msg)
{
    $sock = socket_create(AF_UNIX, SOCK_STREAM, 0) or die("socket_create() failed: reason: ".socket_strerror(socket_last_error()));
    echo '<br>socket created<br>';

    socket_connect($sock, $socket) or die("socket_create() failed: reason: ".socket_strerror(socket_last_error()));
    echo 'Connected to '.$socket.'<br><br>';


    $length = strlen($msg);

    while (true)
    {
        echo 'Going to write '.$msg.'<br>';
        $sent = socket_write($sock, $msg, $length);
        //echo 'Read '.socket_read($sock, $length).'<br>';
        if ($sent === FALSE)
        {
            echo "could not write<br>";
            break;
        }
        // Check if the entire message has been sent
        if ($sent < $length) {
            // If not sent the entire message.
            // Get the part of the message that has not yet been sented as message
            $msg = substr($msg, $sent);
            // Get the length of the not sented part
            $length -= $sent;
            echo $length." more characters need to be writte<br>";
        }
        else
        {
            echo "Finished writing<br>";
            break;
        }
    }
    echo 'Done writing '.$msg;

    socket_close($sock);
}

Эта функция выводит

socket created
Connected to /tmp/cool_socket

Going to write SET 4 1
Finished writing
Done writing SET 4 1

Проблема, с которой я столкнулся, заключается в том, что 4 1 записывается в сокет, а SET - нет.Я слушаю сокет и печатаю любое сообщение, которое будет напечатано на нем.Поэтому, как только я посылаю SET 4 1 в сокет, программа сокета выводит 4 1. Что именно я делаю не так и почему SET не получает send?

Код, по которому я вызываю функцию, таков

$i = 1;
define("RESTART", " 4");
define("SOCKET_DIRECTORY", '/tmp/');
$msg = "SET".RESTART." ".($i);
write_to_socket(SOCKET_DIRECTORY.get_socket_name($i), $msg);

где get_socket_name ($ i) возвращает cool_socket каждый раз, независимо от того, какое значение я ему отправляю.

Спасибо всем за помощь.

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