-2

スレッドに基づく非同期ソケット クライアントを開発しています。プログラムが を呼び出すと、プログラムはreadLine()無期限にブロックされ、戻ることはありません。

public class ADNClient {

  Socket socket = null;
  DataOutputStream dataOutputStream = null;
  DataInputStream dataInputStream = null;

  Thread listener = new Thread(new Runnable() {
    @Override
    public void run() {
      String line;
      try {
        // Stop here and doesn't progress
        while ((line = dataInputStream.readLine()) != null) {
          //DO something
        }
      } 
      catch (IOException e) {}
    });

    public ADNClient() {
    try {
      socket = new Socket("192.168.1.5", 5000);
      dataOutputStream = new DataOutputStream(socket.getOutputStream());
      dataInputStream = new DataInputStream(socket.getInputStream());
      listener.start();
      //sender.start();
    } catch (Exception e) {
      Log.e("ADN", e.getMessage());
    }
  }

  public void close() {
    listener.stop();
    try {
      socket.close();
    } catch (IOException e) {
      Log.e("ADN", e.getMessage());
    }
  }
}
4

1 に答える 1

0

わかりました...私はIN/Outputstreamsに慣れていません...改行文字を送信しませんでした。情報を受け取る正しい方法は、

readUTF()

それ以外の

readLine() 

グレッグコフありがとう!

于 2012-06-05T10:29:34.880 に答える