0

これは私のPHPクライアントコードです:

<?php
    $service_port = 5310;
    $address = gethostbyname('192.168.40.100');

    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    if ($socket === false)
        echo "socket_create() falló: razón: " . socket_strerror(socket_last_error()) . "<br />";
    else
    {
        $result = socket_connect($socket, $address, $service_port);
        if ($result === false)
            echo "socket_connect() falló.\nRazón: ($result) " . socket_strerror(socket_last_error($socket)) . "<br />";
        else
        {   
            $in = "Envio esto: HOLA";
            $out = 'RESPONSE: ';
            echo "ANTES: " . date("H:i:s") . "<br />"; // #1
            socket_write($socket, $in, strlen($in));
            echo "DESPUÉS: " . date("H:i:s") . "<br />"; // #2 Same time as #1
            // Leer/imprimir respuesta
            while ($out = socket_read($socket, 2048))
                echo "RESPONSE: " . date("H:i:s") . " " . $out; // #3 Same time as #2
        }
    }

    // Cerramos socket
    socket_close($socket);
    echo "BANANA: " . date("H:i:s") . "<br />"; // Always run when I got disconected from server
?>

へのアクセス権はありませんがserver code、少し読みました。書き込みがあり、次のVB.netようなものを使用していますClient.socket.send()。応答があり、サーバーが私を切断したときにそれらのエコーがよく印刷されているのがわかります。そうでない場合、php がハングします。どこにもいない。

EDITサーバーに 別のメッセージを追加socket_write()して、接続を解除してくださいが、2番目のメッセージがサーバーに送信されていません。

<?php
    $service_port = 5310;
    $address = gethostbyname('192.168.40.100');

    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    if ($socket === false)
        echo "socket_create() falló: razón: " . socket_strerror(socket_last_error()) . "<br />";
    else
    {
        $result = socket_connect($socket, $address, $service_port);
        if ($result === false)
            echo "socket_connect() falló.\nRazón: (" . $result . ") " . socket_strerror(socket_last_error($socket)) . "<br />";
        else
        {   
            $in = "Envio esto: HOLA";
            $out = '';
            $response = "RESPONSE: ";
            echo "PRIMERA;";
            socket_write($socket, $in, strlen($in));
            while ($out = socket_read($socket, 2048))
                $response .= $out;
            echo $response . ";SEGUNDA;";
            $in = "close";
            $out = '';
            $response = "";
            socket_write($socket, $in, strlen($in));
            while ($out = socket_read($socket, 2048))
                $response .= $out;
            echo $response . " " . date("H:i:s");
        }
    }
    socket_close($socket);
?>
4

1 に答える 1