0

問題があります。

ユーザーが入力した IP で Game-Server に接続したい。サーバーが正しいサーバーであるか、サーバーが存在しない限り、すべて問題ありません。接続または例外があります。

問題は、ゲームを実行していない既存のサーバーに 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.";
        }

それが問題であれば、私はJmonkeyでJAVAを使用しています。

4

1 に答える 1

1

タイムアウトの問題はすでに議論されています: http://hub.jmonkeyengine.org/t/set-timeout-for-network-connecttoserver/30836

jmonkeyengine の開発者は、タイムアウト パラメータを持つ Network.connectToServer のバージョンを作成する必要があると思います。java.net.Socket はタイムアウトをサポートしているため、難しいことではありません。(たぶんあなたは彼らに尋ねることができます)

とにかく、回避策として、ここで説明されているように、いつでも別のスレッドで接続試行を開始できます:スレッドをタイムアウトにする方法

于 2015-01-27T20:29:10.443 に答える