【问题标题】:java timeout thread for connection to wrong server用于连接到错误服务器的 java 超时线程
【发布时间】:2015-01-27 18:26:37
【问题描述】:

我有一个问题。

我想使用用户输入的 IP 连接到游戏服务器。 只要服务器是正确的或服务器不存在一切都很好,我有一个连接或异常。

问题是,如果我将 IP 放入不运行我的游戏的现有服务器。 在这种情况下,程序停留在连接事件中并且不对任何东西做出反应。 我考虑过设置一个计时器线程,尽管那没有用。该程序不会对用户的任何输入做出反应,只允许您关闭它。

我将客户端实现为线程,将定时器实现为线程。如果超时,Timer-Thread 应该停止 Client-Thread。

我的计时器:

public class Timer extends Thread{
    private int counter;
    private Coplayer client;

    Timer(int i, Coplayer c){
        if (i>=0) {
            counter = i;
        } else {
            counter = -i;
        }
        client = c;
    }

    @Override
    public void run (){
        if (counter>0) {
            counter -= 1;
        } else {
            client.stop();
        }
    }

和我的客户:

 try {
            Timer t1 = new Timer(100, this);
            client=Network.connectToServer(ip,port);//this is the line the programm halts
            t1.stop();
            client.start();

                connected = true; 
                Serializer.registerClass(Message_String.class);
                Serializer.registerClass(Message_Player.class);
                CL = new ClientListener();
                client.addMessageListener(CL, Message_String.class);
                client.addMessageListener(CL, Message_Player.class);
                return "Verbunden.";

        } catch (java.net.ConnectException e){
            connected = false;
            return "Verbindung konnte nicht hergestellt werden.";
        } catch (java.net.UnknownHostException e){
            connected = false;
            return "Server nicht bekannt.";
        } catch (IOException ex) {
            connected = false;
            return "Falsche Eingabe.";
        }

如果这很重要,我正在将 JAVA 与 Jmonkey 一起使用。

【问题讨论】:

  • Network.connectToServer 方法定义在哪里?这样的方法应该有一个超时参数。
  • 这是来自 spidermonkey 的方法。如果超时,我没有找到任何信息,但它调用了我正在捕获的异常。但是在错误的服务器上也不例外,但也没有连接。我可以指定游戏,服务器将运行,但这也无济于事,但没有什么比这更有效。
  • 有关更多信息,请查看我在 hub.jmonkeyengine.org/t/check-server-game-id/31342/3 上的故障排除,但我们也没有找到解决方案,这就是我问你的原因。

标签: java multithreading timer client-server halting-problem


【解决方案1】:

超时问题已经讨论过了:http://hub.jmonkeyengine.org/t/set-timeout-for-network-connecttoserver/30836

我仍然认为 jmonkeyengine 开发人员应该创建一个具有超时参数的 Network.connectToServer 版本。应该不难,因为 java.net.Socket 支持超时。 (也许你可以问他们)

无论如何,作为一种解决方法,您始终可以在单独的线程上启动连接尝试,如下所述:How to timeout a thread

【讨论】:

  • 同意,+1。他们似乎完全否认或无知。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
  • 2018-11-21
  • 1970-01-01
  • 1970-01-01
  • 2018-11-26
相关资源
最近更新 更多