0

数日から、私は Web ソケットと戦っています。しかし、それでも今はそれをつかむことができませんでした。

特定のアドレス+ポートにメッセージを送信するPHPでサーバー側ファイルを作成することができました。しかし、HTML5 ソケット API を使用してクライアント側でそのメッセージにアクセスしようとすると、それを取得できません。

これが私のサーバー側のPHP cileコードです..

 $address = "127.0.0.1";
 $service_port = 80;

error_reporting(E_ALL);

/* Create a TCP/IP socket. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    echo "socket_create() failed: reason: " . 
    socket_strerror(socket_last_error()) . "\n";
}

echo "Attempting to connect to '$address' on port '$service_port'...";
$result = socket_connect($socket, $address, $service_port);
if ($result === false) {
   echo "socket_connect() failed.\nReason: ($result) " . 
      socket_strerror(socket_last_error($socket)) . "\n";
}

$in = "HEAD / HTTP/1.1\r\n";
$in .= "Host: www.google.com\r\n";
$in .= "Connection: Close\r\n\r\n";
$out = '';

echo "Sending HTTP HEAD request...";
if(!socket_write($socket, $in, strlen($in)))
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);

    die("Could not send message on socket : [$errorcode] $errormsg \n");
}
echo "OK.\n";

私のクライアント側では、次のコードを使用しています。

<script type="text/javascript">    
// Let us open a web socket
var ws = new WebSocket("ws://127.0.0.1:80/");
ws.onopen = function()
{
    // Web Socket is connected, send data using send()
    ws.send("Message to send");
    alert("Message is sent...");
};
ws.onmessage = function (evt) 
{ 
    var received_msg = evt.data;
    alert("Message is received...");
};
ws.onclose = function()
{ 
    // websocket is closed.
    alert("Connection is closed..."); 
};  
</script>

echo "Reading response:\n\n";
while ($out = socket_read($socket, 2048)) {
    echo "<br><br>$out<br><br>";
}

socket_close($socket);    

しかし、このJavaScriptを使用してサーバー側のメッセージを受信できません。

Webソケットに手を入れようとするのはこれが初めてです。SO、これを行う方法がまったくわかりません。私もグーグルでよく検索しますが、どこで何が間違っているのかわかりません。

よろしく

4

2 に答える 2

1

1024 未満のポートにはルート権限が必要なため、1024 を超える別のポートを使用することをお勧めします。使用するこのポートは、既にインターネット サービスで使用しようとしています。

$ telnet servername portNumber 

shell または cmd でテストしてから、websocket オブジェクトを使用してみてください。

于 2013-11-25T14:27:48.020 に答える
0

WebSocket に接続する前に、ユーザーが使用しているブラウザーが WebSocket をサポートしているかどうかを確認することをお勧めします....そのように....

 //First check for firefox, and set it to regular websocket...since Mozilla API is                   differently named
if (window.MozWebSocket) {
 window.WebSocket = window.MozWebSocket;
 }

//Then continue with checking
var connection = {};
 function connect() {
 if(window.WebSocket != undefined) {

 if(connection.readyState === undefined || connection.readyState > 1)
  {
    connection = new WebSocket('ws://127.0.0.1:80');
  }
  }
 }
于 2013-06-21T18:03:54.940 に答える