【问题标题】:JS WebSocket, Problem with making a connection to the ServerJS WebSocket,与服务器建立连接时出现问题
【发布时间】:2021-09-05 12:44:17
【问题描述】:

我只是想测试WebSockets,所以我搜索了它们并找到了一些教程。然后,我用 PHP 编写了一些代码来创建 WebSocket 服务器。之后,我创建了一个客户端 HTML 文件,该文件尝试通过创建连接将数据发送到 WebSocket 服务器文件。现在,我遇到的问题是我不知道 HTML 客户端文件中的主机名应该是什么(它给了我一个错误)。

我的 WebSocket PHP 服务器文件包含以下内容:

<?php
$host = "192.168.xxx.xx";
$port = 8080;
set_time_limit(0);

$sock = socket_create(AF_INET, SOCK_STREAM, 0) or die("Couldn't create socket.");
$result = socket_bind($sock, $host, $port) or die("Couldn't bind to socket.");

$result = socket_listen($sock, 3) or die("Couldn't set up socket listener.");

do {
    $accept = socket_accept($sock) or die("Couldn't accept incoming connection.");
    $msg = socket_read($accept, 1024) or die("Couldn't read input.");
    $msg = trim($msg);

    $reply = "Message from server";
    socket_write($accept, $reply, strlen($reply)) or die("Couldn't write output.");
} while (true);

socket_close($accept, $sock);
?>

我的 HTML 客户端文件包含:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>WebSocket</title>
    </head>
    <body>
        <input type="text" name="msg" id="msg">
        <button id="sendbtn">Send</button>

        <script>
        const socket = new WebSocket('ws://192.168.xxx.xx:8080/');

        socket.addEventListener('open', function(event){
            console.log("Socket was created.");
        });

        document.getElementById("sendbtn").addEventListener('click', function(){

            socket.send(document.getElementById("msg").value);

        });
    
        socket.addEventListener('message', function(event){
            alert(event.data);
        });
        </script>
    </body>
</html>

这两个文件一起放在一个文件夹中(即 DocumentRoot)。

感谢任何帮助。

【问题讨论】:

  • 你的 PHP 代码创建了一个标准的 TCP 套接字,而不是一个 websocket。获取像 Ratchet 这样的实际 websocket 服务器,或者如果您愿意,可以自己实现 websocket 标准 - 但它与基本的 TCP 套接字不同。
  • @ADyson,感谢您的回复。如何在我的代码中包含 Ratchet WebSocket Server?
  • 感谢您的帮助,@ADyson。

标签: javascript php html websocket server


【解决方案1】:

根据用户@ADyson 在 cmets 中所说,简单的 TCP 连接不能用于创建 WebSocket 服务器。相反,可以使用Ratchet WebSocket Server。

【讨论】:

    猜你喜欢
    • 2012-10-17
    • 2019-03-12
    • 2010-12-11
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    相关资源
    最近更新 更多