如何在java服务器和javascript客户端之间使用套接字通信?
我正在尝试用socket.io连接java服务器和Javascript客户端。当我在浏览器中看到调试器时,看起来好像正在接收数据,但我收到了以下错误:“原因:CORS标头“Access Control Allow Origin”丢失,并且我无法在客户端打印数据如何在java服务器和javascript客户端之间使用套接字通信?,javascript,java,socket.io,serversocket,Javascript,Java,Socket.io,Serversocket,我正在尝试用socket.io连接java服务器和Javascript客户端。当我在浏览器中看到调试器时,看起来好像正在接收数据,但我收到了以下错误:“原因:CORS标头“Access Control Allow Origin”丢失,并且我无法在客户端打印数据 import... public class MeuServerSocket { //initialize socket and input stream private Socket socket = null;
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());
}
}
public static void main(String[] args) {
MeuServerSocket server = new MeuServerSocket(5000);
}
}
当我查看Firefox网络时,我看到数据是在其中一个包中发送的
TLDR:使用
ws://…
而不是http://...
详细信息:
https
用于HTTP协议。在这种情况下,浏览器首先询问服务器是否允许CORS是正确的。您尚未启用CORS。这就是为什么浏览器拒绝发送CORS请求是正常的
但是你说你想使用网络套接字。然后您应该使用
ws://
,而不是http://
。对于Web套接字,没有CORS策略,浏览器将在没有CORS限制的情况下发送您的请求。TLDR:使用ws://…
而不是http://...
详细信息:
https
用于HTTP协议。在这种情况下,浏览器首先询问服务器是否允许CORS是正确的。您尚未启用CORS。这就是为什么浏览器拒绝发送CORS请求是正常的
但是你说你想使用网络套接字。然后您应该使用
ws://
,而不是http://
。对于Web套接字,没有CORS策略,浏览器将在没有CORS限制的情况下发送您的请求。我在这里看到的最大问题是对socket.io的误解。javascript的Socket.io与java中的套接字库不兼容。命名约定肯定会令人困惑
io是一个与web套接字(ws://)相关的库。它实现了websocket的所有基本功能以及一些额外功能
java代码所拥有的是一个TCP套接字服务器。虽然WebSocket和socket.io构建在TCP套接字上,但不能将socket.io客户端连接到“裸”套接字服务器
解决方案:
如果您的javascript是从nodejs运行的,您可以使用找到的网络库。如果您是从webbrowser运行javascript,那么您将仅限于websocket,这意味着您要将java代码更改为websocket服务器。你可以在网上的某个地方找到这方面的图书馆 我在这里看到的最大问题是对socket.io的误解。javascript的Socket.io与java中的套接字库不兼容。命名约定肯定会令人困惑 io是一个与web套接字(ws://)相关的库。它实现了websocket的所有基本功能以及一些额外功能 java代码所拥有的是一个TCP套接字服务器。虽然WebSocket和socket.io构建在TCP套接字上,但不能将socket.io客户端连接到“裸”套接字服务器 解决方案:
如果您的javascript是从nodejs运行的,您可以使用找到的网络库。如果您是从webbrowser运行javascript,那么您将仅限于websocket,这意味着您要将java代码更改为websocket服务器。你可以在网上的某个地方找到这方面的图书馆 如果答案有帮助,你可以将其标记为有帮助。如果答案有帮助,你可以将其标记为有帮助。
var socket = io('http://localhost:5000');
socket.on('connect', function () {
socket.send('hi \nOver');
socket.on('get', function (msg) {
// my msg
console.log('msg: '+msg)
})
socket.on('disconnect',()=>{
console.log('disconnected')
})
})