首先,您的代码看起来与 Java 和 JavaScript 代码相同。两者都按其设计目的工作,但事实是您正在尝试将 WebSocket 客户端连接到套接字服务器。
据我所知,在这方面它们是两件不同的事情answer.
我从来没有尝试过你的方法。也就是说,如果我有一个使用套接字的网络应用程序,那么它将是纯客户端/服务器套接字,如果它是一个 Web 应用程序,那么我也会在两侧使用 WebSocket。
到目前为止,一切都很好..
为了使这项工作顺利进行,这个答案建议在服务器端使用任何可用的 WebSocket,您的问题就可以解决。
我在用Java 的 WebSocket这是一个示例实现,我已经使用您的客户端代码进行了测试,并且它在客户端和服务器端都有效。
import org.java_websocket.WebSocket;
import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;
import java.net.InetSocketAddress;
import java.util.HashSet;
import java.util.Set;
public class WebsocketServer extends WebSocketServer {
private static int TCP_PORT = 4444;
private Set<WebSocket> conns;
public WebsocketServer() {
super(new InetSocketAddress(TCP_PORT));
conns = new HashSet<>();
}
@Override
public void onOpen(WebSocket conn, ClientHandshake handshake) {
conns.add(conn);
System.out.println("New connection from " + conn.getRemoteSocketAddress().getAddress().getHostAddress());
}
@Override
public void onClose(WebSocket conn, int code, String reason, boolean remote) {
conns.remove(conn);
System.out.println("Closed connection to " + conn.getRemoteSocketAddress().getAddress().getHostAddress());
}
@Override
public void onMessage(WebSocket conn, String message) {
System.out.println("Message from client: " + message);
for (WebSocket sock : conns) {
sock.send(message);
}
}
@Override
public void onError(WebSocket conn, Exception ex) {
//ex.printStackTrace();
if (conn != null) {
conns.remove(conn);
// do some thing if required
}
System.out.println("ERROR from " + conn.getRemoteSocketAddress().getAddress().getHostAddress());
}
}
在你的主要方法上:
new WebsocketServer().start();
您可能需要操作您的代码以使其适合此实现,但这应该是工作的一部分。
这是 2 个测试的测试输出:
New connection from 127.0.0.1
Message from client: Ping
Closed connection to 127.0.0.1
New connection from 127.0.0.1
Message from client: Ping
这是 WebSocket maven 配置,否则手动下载 JAR 文件并将其导入到您的 IDE/开发环境中:
<!-- https://mvnrepository.com/artifact/org.java-websocket/Java-WebSocket -->
<dependency>
<groupId>org.java-websocket</groupId>
<artifactId>Java-WebSocket</artifactId>
<version>1.3.0</version>
</dependency>
Link to WebSocket.