Показать сообщение отдельно

  #4  
Старый 07.01.2010, 19:47
Maxxxtri23
Познающий
Регистрация: 20.12.2008
Сообщений: 76
С нами: 9152717

Репутация: 6
По умолчанию

Имеется php скрипт для работы с сокетами
PHP код:
<?php
error_reporting
(E_ALL);

/* Позволить сценарию зависнуть вокруг ожидания подключений */
set_time_limit(0);

/* Включить неявный вывод, так что мы видим то, что мы получаем
 * когда это приходит . */
ob_implicit_flush();

$address '127.0.0.1';
$port 10000;

if ((
$sock socket_create(AF_INETSOCK_STREAMSOL_TCP)) < 0) {
    echo 
"socket_create() failed: reason: " socket_strerror($sock) . "\n";
}

if ((
$ret socket_bind($sock$address$port)) < 0) {
    echo 
"socket_bind() failed: reason: " socket_strerror($ret) . "\n";
}

if ((
$ret socket_listen($sock2)) < 0) {
    echo 
"socket_listen() failed: reason: " socket_strerror($ret) . "\n";
}

do {
    if ((
$msgsock socket_accept($sock)) < 0) {
        echo 
"socket_accept() failed: reason: " socket_strerror($msgsock) . "\n";
        break;
    }
    
/* Send instructions. */
    
$msg "\nWelcome to the PHP Test Server. \n" .
        
"To quit, type 'quit'. To shut down the server type 'shutdown'.\n";
    
socket_write($msgsock$msgstrlen($msg));

    do {
        if (
false === ($buf socket_read($msgsock2048PHP_NORMAL_READ))) {
            echo 
"socket_read() failed: reason: " socket_strerror($ret) . "\n";
            break 
2;
        }
        if (!
$buf trim($buf)) {
            continue;
        }
        if (
$buf == 'quit') {
            break;
        }
        if (
$buf == 'shutdown') {
            
socket_close($msgsock);
            break 
2;
        }
        
$talkback "PHP: You said '$buf'.\n";
        
socket_write($msgsock$talkbackstrlen($talkback));
        echo 
"$buf\n";
    } while (
true);
    
socket_close($msgsock);
} while (
true);

socket_close($sock);
?>
Если подключаться к нему неткатом или самописным клиентом на делфи то все сообщения через сокет нормально проходят и если отправить quit то соединение благополучно закрывается и php скрипт продолжает работать. А если не отсылать quit, а просто закрыть прогу, то скрипт выдает
Код:
Warning: socket_read(): unable to read from socket [0]: ╙фрыхээ√щ їюёЄ яЁшэєфшЄх
ы№эю ЁрчюЁтры ёє∙хёЄтє■∙хх яюфъы■ўхэшх.
 in D:\xampp\htdocs\index.php on line 37
socket_read() failed: reason: ═хтхЁэр* ЇєэъЎш*.
И соответственно перестает работать. Что нужно исправить, чтобы при закрытии клиента без предварительной отправки quit скрипт продолжал работать?

P.S. как исправить кодировку тоже немогу понять.
Запускаю скрипт командой D:\xampp\php\php.exe D:\xampp\htdocs\index.php

Последний раз редактировалось Maxxxtri23; 07.01.2010 в 19:51..
 
Ответить с цитированием