0

Androidデバイスにある私のサーバーでは、クライアントの数が特定の数を超えると、サーバーはソケットを閉じます。しかし、私のクライアント(他のAndroidデバイス)では、力を近づけます。どうすればそれを優雅に処理できますか?これが私のクライアントの接続部分です:

    serverIpAddress = serverIp.getText().toString();

    if (!serverIpAddress.equals(""))
    {
            try
            {
                 InetAddress serverAddr = InetAddress.getByName(serverIpAddress);
                 SocketAddress sockaddr = new InetSocketAddress(serverAddr, 5000);
                 nsocket = new Socket();
                 nsocket.connect(sockaddr);                    
            }catch(Exception e){
                 Log.i("Connect", "Connection Error");
            }

            if (nsocket.isConnected()){
                  score.setText("Your score is " + sc);
                  serverIp.setVisibility(View.GONE);
                  connectPhones.setVisibility(View.GONE);
                  enterIP.setVisibility(View.GONE);
                  Log.i("Connect", "Socket created, streams assigned");
                  Log.i("Connect", "Waiting for inital data..." + nsocket.isConnected());
                  receiveMsg();
            }
4

2 に答える 2

0

無限ループ内でソケット接続がまだ開いているか、isClosed() を使用していないかを確認し続けます。サーバーが接続を閉じると、isClosed() が true になり、ユーザーに目的の理由を示すメッセージまたはトーストが表示されます。

于 2012-05-29T19:31:44.577 に答える
0

ソケットの読み取りに使用しているものはすべてブロッキング読み取りであり、ソケットが閉じてその読み取りでスタックすると例外がスローされるように聞こえます。read が try ブロック内にあることを確認し、catch/finally を使用して、その時点で行っていることを正常に終了します。

于 2012-05-29T21:04:21.693 に答える