从几天开始,我正在与网络插座作斗争。但是,现在我无法控制它。
我设法通过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接收服务器端消息。
这是我第一次尝试将手插入网络套接字。所以,我完全不知道该怎么做。我也在谷歌搜索了很多,但无法弄清楚在哪里&amp;我做错了什么。
此致
答案 0 :(得分:1)
最好使用1024以上的另一个端口,因为1024以下的端口需要root权限,而你已经用于互联网服务的端口尝试使用:
$ telnet servername portNumber
在shell或cmd下测试它,然后你可以尝试使用websocket对象。
答案 1 :(得分:0)
在连接到websockets之前总是很好的做法,检查用户使用的浏览器是否支持它们......就像这样....
//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');
}
}
}