当前位置: 首页 > 知识库问答 >
问题:

WebSocket onpens函数不工作

单于山
2023-03-14

我通过web套接字发送一个文本到一个Java服务器,但不会被调用,这是我为客户端使用的函数(WebSocketTest),当我关闭服务器时,会正确调用on近函数的警报消息

function WebSocketTest()
{
  if ("WebSocket" in window)
  {

     alert("WebSocket is supported by your Browser!");
     // Let us open a web socket
     var ws = new WebSocket("ws://localhost:4444");
     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..."); 
     };
  }
  else
  {
     // The browser doesn't support WebSocket
     alert("WebSocket NOT supported by your Browser!");
  }
}

这就是我在服务器上接收到的内容

GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: localhost:4444
Origin: null
Pragma: no-cache
Cache-Control: no-cache
Sec-WebSocket-Key: 4BAiV8AU80juonjYQw5V9g==
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: x-webkit-deflate-frame
User-Agent: Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko)      Chrome/31.0.1650.63 Safari/537.36

这是服务器端

public class InvoiceListener {

    private static BufferedReader in;
    private final static int port = 4444;
    private static ServerSocket listenSocket;
    private static Socket client;
    private static Invoice invoice;
    private static String info;

    public static void main(String[] args) throws IOException {

        PrintInvoice printer;
        ServerSocket listenSocket = new ServerSocket(port);


            System.out.println("Listening");
            client = listenSocket.accept();
            System.out.println("client connected !");
            in = new BufferedReader(new InputStreamReader(
                    client.getInputStream()));
            while ((info = in.readLine()) != null) {
                System.out.println(info);
            }

    }

}

共有2个答案

劳宇
2023-03-14

好的,我找到了解决方案,看起来我收到的日期实际上是由于握手协议

GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: localhost:4444
Origin: null
Pragma: no-cache
Cache-Control: no-cache
Sec-WebSocket-Key: 4BAiV8AU80juonjYQw5V9g==
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: x-webkit-deflate-frame
User-Agent: Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko)

我必须再次从服务器向客户端发送响应以启动连接,这就是Onopen功能工作的时候

伯俊弼
2023-03-14

您不能将ServerSocket与web socket一起使用,您需要一个支持侦听web socket调用的web服务器,您可以在此处查看支持的web服务器。

支持的web套接字java服务器:

  • http://jwebsocket.org/
  • http://tomcat.apache.org/
  • http://eclipse.org/jetty/
  • http://grizzly.java.net/
  • http://www.caucho.com/resin-web-server/

哪些流行的Web服务器支持HTML5WebSocket?

 类似资料:
  • 我试图从oracle中的XML列中提取值。我的问题如下: 但是,我的SQL Developer中出现以下错误: ORA-00932:不一致的数据类型:预期-得到- 00932. 00000-"不一致的数据类型:预期%s得到%s" 附加信息: 我试图查询的columnn类型是:VARCHAR2(2000字节) 该列中的XML内容非常简单,下面是一个片段:

  • 我试图部署postgresDemo函数从node.js样本。但是我没有成功连接到我的云SQL实例。 我使用以下命令发布函数:gCloud beta函数部署postgresDemo--runtime nodejs8--env-vars-fileenv.yaml--trigger-超文本传输协议 我添加了控制台日志,以查看是否所有需要的环境变量都已正确填充,并且一切正常。但是当我尝试创建pg.Pool

  • 使用scandir()函数时,我收到以下php警告: Scandir无法打开目录:公共html/page2中不允许操作。php在线3 第2页。php 我想使用这个功能来打印我的根文件夹的文件和子目录,但它不工作。 有人知道怎么修吗?

  • 我正在用Azure函数做一个小POC。我已经从VS模板创建了一个简单的HttpTrigger函数,如果我在localhost中debbug都可以完美地工作,但如果我在Azure中部署,当我试图启动该函数时,我会遇到一个错误: 发生了一个错误。有关更多信息,请检查日志中的错误ID为24D8E48F-D925-45AD-82CF-F767Decc5F6F 如果我签入Insights,错误是: 调用堆栈

  • 这是我的代码中不起作用的一部分我是在使用python处理3的过程中这样做的

  • 我有两台服务器: 1)PHP版本7.0.28-1~dotdeb 8.1 System Linux online 3.16。0-4-amd64#1 SMP Debian 3.16。51-2(2017-12-03)x86_64服务器API FPM/FastCGI虚拟目录支持禁用配置文件(php.ini)路径/etc/php/7.0/FPM 2)PHP版本5.6.34-1~dotdeb 7.1 Syst