【问题标题】:Java and Javascript Socket IssueJava 和 Javascript 套接字问题
【发布时间】:2014-08-18 21:45:28
【问题描述】:

我正在开发一个 chrome 扩展,它应该使用套接字与 Java 编写的进程进行通信。 只是为了测试,我尝试了以下代码,但输出字符串 Ping 除外。

Java 代码是:

    try {
        serverSocket = new ServerSocket(PORT_NUMBER); //PORT NUMBER IS 1025
        serverSocket.setSoTimeout(0); // no timeout
        while(true){
            Socket socket = serverSocket.accept();
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String line;
            while ((line = in.readLine()) != null){
                System.out.println(line);
            }
        }

    } catch (IOException e) {
        System.out.println("PORT CONNECTION PROBLEM");
    }

JS代码如下:

var connection = new WebSocket('ws://127.0.0.1:1025');

connection.onopen = function () {
  connection.send('Ping'); // Send the message 'Ping' to the server
};

输出是:

GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: 127.0.0.1:1025
Origin: http://www.reddit.com
Pragma: no-cache
Cache-Control: no-cache
Sec-WebSocket-Key: ocm8QWpqeJ2Lps7QJlsoHw==
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits, x-webkit-d
eflate-frame
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/36.0.1985.143 Safari/537.36

我不仅得到了上面所有我没有要求的数据,而且我也没有得到使用套接字发送的消息“Ping”。 如果有人能告诉我我做错了什么并指出解决方案,我将不胜感激,在此先感谢。

【问题讨论】:

    标签: java javascript sockets google-chrome-extension


    【解决方案1】:

    您不是在 Java 中实现 WebSocket protocol 服务器,而是一个简单的类似 telnet 的服务器。

    浏览器尝试按照协议建立连接,方法是发送您收到的HTTP Upgrade request,但未收到预期的响应。

    因此,您的 onopen 事件永远不会触发,因为从浏览器的角度来看,它没有建立连接。

    建议:不要“重新发明轮子”并使用一些现成的 Java WebSocket 库,除非您这样做是为了学习。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多