Java websocket 主机?

标签 java sockets websocket

我目前正在尝试一些多人游戏的想法,并正在尝试创建一个 Java 应用程序来为基于网络浏览器的多人游戏提供服务。

我的开发环境是主机上的Eclipse, native 上的notepad + Google Chrome。

我在客户端使用 javascript 创建 websocket,在服务器端使用 java.net.Socket。

我已经设法让两端都确认了连接,但如果客户端不关闭连接,似乎无法在它们之间发送或接收任何数据(甚至没有错误;只是似乎对某些事情感到害怕并且调用 socket.close)。

有没有人有什么想法?

这是一些代码:

客户:

<script type="text/javascript">
var socket;

function init() {
    socket = new WebSocket("ws://192.168.0.3:10000");
    socket.onopen = function() { alert('OPEN: ' + socket.readyState); }
    socket.onmessage = function (msg) { alert('DATA: ' + msg.data); }
    socket.onerror = function (msg) { alert('DATA: ' + msg.data); }
    socket.onclose = function () { alert('CLOSED: ' + socket.readyState); }
}

function onClick() {
    socket.send("YAY!");
}
</script>

服务器:

public static void main(String args[])
{
    System.out.printLn("Websocket server test");

    ServerSocket connectSocket = null;

    try
    {
        Socket clientSocket;
        connectSocket = new ServerSocket(10000);
        System.out.printLn("Waiting for connection...");
        clientSocket = connectSocket.accept();
        System.out.printLn("Got one!");

        PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(
            new InputStreamReader(clientSocket.getInputStream()));

        for(int i=0;i<100;i++) //Shit but easy
        {
            String data = in.readLine();
            System.out.printLn("Got data: " + data);
            out.printLn("YAY!");
        }
    }
    catch (IOException e)
    {
        System.out.printLn("You fail: " + e.getMessage());
    }

    System.out.printLn("Finished!");
}

最佳答案

与其采用痛苦的方式实现 spec在 Java 中,我建议您使用现有的解决方案,例如 jWebSocket .

此外,如果您不介意离开 Java 领域,我还建议您看看 Node.js。为您的服务器。

在 JavaScript 中同时执行服务器和客户端将为您节省大量时间和大量代码,尤其是因为 JSON 不太适合静态环境。在 Node.js 中创建多人服务器也很简单,因为基于事件的单线程模型非常适合整个过程。

有关 WebSocket 的更多信息可以在 FAQ 中找到.如果您想开始使用 Node.js,请查看 TagWiki .

无耻的插件跟着

对于两个使用 Node.js 编写的多人游戏,请查看我的 GitHub page .

关于Java websocket 主机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4292624/

相关文章:

java - 参数不会传递到对象中

java - 如何只读电影名称?

javascript - 为什么 WebSocket.onmessage 事件不会触发?

javascript:在所有选项卡中运行一次代码

java - 是否可以在桌面应用程序中使用 Java WebSocket?

java - Blowfish 解密十六进制编码的字符串

java - 为什么这个套接字为空?

c - 在对等方关闭的 TCP 套接字上写入

java - 当 android 设备处于 wifi 时,SSLSocket 在 getInputStream 处挂起

java - 如何通过套接字将字符串从线程发送到服务器