为了账号安全,请及时绑定邮箱和手机立即绑定

如何在java服务器和javascript客户端之间使用socket通信?

如何在java服务器和javascript客户端之间使用socket通信?

喵喵时光机 2023-07-28 16:01:57
我正在尝试使用socket.io 连接java 服务器和Javascript 客户端。当我在浏览器中看到调试器时,看起来正在接收数据,但我收到此错误:“原因:CORS 标头‘Access-Control-Allow-Origin’丢失”并且我无法打印数据在客户端。import...public class MeuServerSocket {    //initialize socket and input stream     private Socket socket = null;    private ServerSocket server = null;    private DataInputStream in = null;    public MeuServerSocket(int port) {        // starts server and waits for a connection         try {            while(true){            server = new ServerSocket(port);            System.out.println("Server started");            System.out.println("Waiting for a client ...");            socket = server.accept();            System.out.println("Client accepted");            ObjectOutputStream saida = new ObjectOutputStream(socket.getOutputStream());            saida.flush();            // send available data from server to client            saida.writeObject("Texto enviado 123...");            // takes input from the client socket             in = new DataInputStream(                 new BufferedInputStream(socket.getInputStream()));             String line = "";             // reads message from client until "Over" is sent             boolean fim = false;            while (!line.equals("Over") && !fim)             {                 try                {                     line = in.readUTF();                     System.out.println(line);                 }                 catch(IOException i)                 {                     fim = true;                    System.out.println(i.toString());                }             }             System.out.println("Closing connection");            // close connection             socket.close();            saida.close();            in.close();            }        } catch (IOException i) {            System.out.println(i);        }catch(Exception e){            System.out.println(e.toString());        }    }当我查看 Firefox 网络时,我发现数据是在其中一个包内发送的......https://i.stack.imgur.com/yB0R6.jpg
查看完整描述

2 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

我在这里看到的最大问题是对 socket.io 的误解。javascript 的 Socket.io 与 java 中的 Socket 库不兼容。命名约定肯定会令人困惑。

socket.io 是一个与 Web 套接字 (ws://) 相关的库。它实现了所有基本的 websocket 功能以及一些额外功能。

您的 Java 代码拥有的是 TCP 套接字服务器。虽然 websockets 和 socket.io 是基于 TCP 套接字构建的,但您无法将 socket.io 客户端连接到“裸”套接字服务器。

解决方案:如果您从网络浏览器运行 javascript,那么您仅限于 websocket,这意味着您要将 java 代码更改为 websocket 服务器。您可以在网上找到该库。


查看完整回答
反对 回复 2023-07-28
?
慕少森

TA贡献2019条经验 获得超9个赞

使用ws://...而不是http://....

详细信息: https用于HTTP协议。在这种情况下,浏览器首先询问服务器是否允许 CORS 是正确的。您尚未启用 CORS。这就是为什么浏览器拒绝发送CORS请求是正常的。

但你说你想使用 Web Sockets。那么你应该使用ws://,而不是http://。对于 Web 套接字,没有 CORS 策略,浏览器将在没有 CORS 限制的情况下发送您的请求。


查看完整回答
反对 回复 2023-07-28
  • 2 回答
  • 0 关注
  • 148 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信