Java websocket主机?

Tob*_*son 11 java sockets websocket

我正在尝试一些多人游戏的想法,我正在尝试创建一个Java应用程序来提供基于Web浏览器的多人游戏.

我的开发环境是主机上的Eclipse,以及笔记本电脑上的记事本+谷歌浏览器.

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

我已经设法在两端确认连接,但似乎无法在客户端关闭连接的情况下发送或接收它们之间的任何数据(甚至没有错误;只是似乎吓坏了某事并调用套接字.关).

有没有人有任何想法?

这是一些代码:

客户:

<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>
Run Code Online (Sandbox Code Playgroud)

服务器:

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!");
}
Run Code Online (Sandbox Code Playgroud)

Ivo*_*zel 11

我建议您使用像jWebSocket这样的现有解决方案,而不是采用在Java 中实现规范的痛苦方式.

此外,如果您不介意离开Java土地,我还建议您查看服务器的Node.js.

在JavaScript中同时执行服务器和客户端将为您节省大量时间和大量代码,特别是因为JSON不适合静态域.在Node.js中创建多人游戏服务器也是微不足道的,因为基于事件的单线程模型非常适合整个事情.

有关WebSocket的更多信息,请参阅常见问题解答.如果您想开始使用Node.js,请查看TagWiki.

无耻的插头如下

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