亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在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 關注
  • 187 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號