-1

このチュートリアルを使用してクライアントサーバー接続を行っています。停止しないという私が直面している問題、Log cat は、クライアントが無限ループでデータを送信することを示し続けます。また、サーバーはこのデータを無限ループで受け取ります

ここに私のコードがあります

提案/変更は大歓迎です。昨日、Googleからの適切な解決策を見つけることができなかったために、この問題に悩まされています。

ありがとう

編集

クライアント側のコード

    public class ClientThread implements Runnable {


    public void run() {
        try {

            InetAddress serverAddr = InetAddress.getByName(serverIpAddress);
            Log.d("ClientActivity", "C: Connecting...");
            socket = new Socket(serverAddr, 8080);
            connected = true;
            while (connected) {
                try {
                    Log.d("ClientActivity", "C: Sending command.");
                    PrintWriter out = new PrintWriter(new BufferedWriter(new 
                     OutputStreamWriter(socket
                                .getOutputStream())), true);
                        // where you issue the commands

                        out.println(serverIpAddress);
                        //connected = false;
                        //socket.close();
                        Log.d("ClientActivity", "C: Sent.");

                } catch (Exception e) {
                    Log.e("ClientActivity", "S: Error", e);
                }


            }
            socket.close();
            Log.d("ClientActivity", "C: Closed.");
        } catch (Exception e) {
            Log.e("ClientActivity", "C: Error", e);
            connected = false;
        }
    }
}

サーバ側

      public class ServerThread implements Runnable {
    private volatile boolean keepGoing = true;
    private volatile boolean firstLoop = true;

    public void requestStop() {
        keepGoing = false;
      }
    public void run() {
        try {
            if (SERVERIP != null) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        serverStatus.setText("Listening on IP: " + SERVERIP);
                    }
                });
                serverSocket = new ServerSocket(SERVERPORT);
                while (keepGoing) {
                    // listen for incoming clients
                    Socket client = serverSocket.accept();
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            serverStatus.setText("Connected.");
                        }
                    });

                    try {
                        BufferedReader in = new BufferedReader(new 
                       InputStreamReader(client.getInputStream()));
                        line = null;
                        while ((line = in.readLine()) != null) {
                            Log.d("ServerActivity", line);
                            handler.post(new Runnable() {
                                @Override
                                public void run() {

                                    serverStatus.setText(line);
                                    Log.d("IP recevied", line);
                                    requestStop();

                                }
                            });
                        }

                        break;
                    } catch (Exception e) {
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                serverStatus.setText("Oops. Connection interrupted.
                        Please reconnect your phones.");
                            }
                        });
                        e.printStackTrace();
                    }
                }
            } else {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        serverStatus.setText("Couldn't detect internet connection.");
                    }
                });
            }
        } catch (Exception e) {
            handler.post(new Runnable() {
                @Override
                public void run() {
                    serverStatus.setText("Error");
                }
            });
            e.printStackTrace();
        }
    }
    }
4

1 に答える 1

0

行のコメントを外す//connected = false;と、機能するはずです。

書き込みストリーム操作の後、同じことを書き戻す代わりに while を終了する必要があります。

于 2012-09-23T10:57:24.443 に答える