我无法使用PHP在Web套接字上发送消息

时间:2015-07-31 13:33:17

标签: php

我的网址:“http://provabextranet.com/es2al/test2_chat.php”。 我想在此URL上发送消息。我使用了所有大多数示例,但无法发送。我用主机:'184.154.48.162'和端口:9001。 它是一个使用JS的Web套接字。我只想通过PHP发送而不是JS。 请帮帮我。

`<?php
echo "<h2>TCP/IP Connection</h2>\n";
$service_port = 9001;
$address = gethostbyname('www.provabextranet.com');
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
} else {
    echo "OK.\n";
}
echo "Attempting to connect to '$address' on port '$service_port'...";
echo socket_connect($socket, $address, $service_port) or die( socket_strerror(socket_last_error()));
socket_strerror(socket_last_error($socket)) . "\n";
$in = "HEAD / HTTP/1.1\r\n";
$in .= "Host: www.provabextranet.com\r\n";
$in .= "Connection: Close\r\n\r\n";
$out = '';

echo "<br>Sending HTTP HEAD request...<br>";
echo socket_sendto($socket, $in, strlen($in),0,$address,$service_port) or die( socket_strerror(socket_last_error()));
echo "OK.\n";
}
socket_close($socket);
echo "OK.\n\n";
?>`

输出:

TCP / IP连接

行。试图在端口'9001'上连接'184.154.48.162'... 1 发送HTTP HEAD请求... 1O K.闭合插座......好的。

和其他计划:

`<?php
$host = '184.154.48.162';
$port = 9001;
$local = "184.154.48.162"; 
$data = 'hello world!'; 
    $head = "GET / HTTP/1.1"."\r\n".
            "Upgrade: WebSocket"."\r\n".
            "Connection: Upgrade"."\r\n".
            "Origin: $local"."\r\n".
            "Host: $host"."\r\n".
            "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ=="."\r\n".
            "Sec-WebSocket-Version: 13"."\r\n".
            "Content-Length: ".strlen($data)."\r\n"."\r\n";
    $sock = fsockopen($host, $port, $errno, $errstr, 2);
    fwrite($sock, $head ) or die('error:'.$errno.':'.$errstr);
    $headers = fread($sock, 2000);

    fwrite($sock, "hello" ,5) or die('error:'.$errno.':'.$errstr);
    echo socket_strerror(socket_last_error());
    $wsdata = fread($sock, 2000); 
    $retdata = trim($wsdata,"\x00\xff");
        $contents = "";
    while (!feof($sock)) {
        echo $contents .= "<br>".fgets($sock, 4096);
    }
    fclose($sock);
?>`

输出: 成功

1 个答案:

答案 0 :(得分:0)

我的英语不好但是明白我要说的是什么...... 实际上你需要打开一个你使用的端口,**

  

首先研究如何打开端口,然后才能发送或接收msg

**。如果你绑定,那么你不必使用bind或connect为同一个ip:port。 你有数组存储并检查它在数组中发送的东西,知道已绑定或不绑定然后再不需要绑定,否则绑定到ip:port