Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android TCP客户端套接字未获取侦听接收器线程_Android_Multithreading_Sockets_Tcp_Bufferedreader - Fatal编程技术网

Android TCP客户端套接字未获取侦听接收器线程

Android TCP客户端套接字未获取侦听接收器线程,android,multithreading,sockets,tcp,bufferedreader,Android,Multithreading,Sockets,Tcp,Bufferedreader,下面的代码无法从TCP服务器读取数据。我找不到问题所在。任何帮助都将不胜感激 class Receive extends Thread { public void run() { while (true){ StringBuilder log = new StringBuilder(); String line = null; BufferedReader bufferedReader = null;

下面的代码无法从TCP服务器读取数据。我找不到问题所在。任何帮助都将不胜感激

class Receive extends Thread {
    public void run() {
        while (true){
           StringBuilder log = new StringBuilder();
           String line = null;
           BufferedReader bufferedReader = null;
           try {
              bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
           } catch (IOException e) {
              e.printStackTrace();
           }

           if(bufferedReader!=null){
             while (true) {
                try {
                    if (!((line = bufferedReader.readLine()) != null)) break;
                } catch (IOException e) {
                    e.printStackTrace();
                }
                log.append(line);
             }
             Log.d("==> ", "data is " + line);
          }
       }
    }
}

外环是不必要的,应该拆下。但更重要的是,只有当
readLine()
返回一个
null
字符串,然后尝试记录该
null
字符串时,您才打破了内部循环

请尝试以下方法:

类接收扩展线程{
公开募捐{
试一试{
StringBuilder日志=新建StringBuilder();
BufferedReader BufferedReader=新的BufferedReader(新的InputStreamReader(socket.getInputStream());
弦线;
而((line=bufferedReader.readLine())!=null){
log.append(行);
}
Log.d(“==>”,“数据是”+Log.toString());
}捕获(IOE异常){
e、 printStackTrace();
}
}
}

话虽如此,请注意,这种代码从服务器读取整行代码,直到断开客户机的连接。并非所有协议都是基于线路的,或者在服务器发送数据后断开连接。如果你的服务器就是这样运行的,那就这样吧。但这对于服务器来说是不寻常的。在不知道您实际连接的服务器类型的情况下,很难说是否应该首先使用这种代码。

(!((line=bufferedReader.readLine())!=null))
一次两次都不能让它非常不可读。请为我们普通的编码者改编。谢谢雷米·勒博。是的,实际上我正在尝试连接到rfid阅读器。这将是连接所有时间。那么我能在这段代码中做什么修改呢?@BiplabDe,这完全取决于RFID阅读器实际使用的通信协议。没有这些细节很难回答你的问题。你能提供一些关于RFID阅读器实际期望的文档或示例吗?RFID有一些标签要扫描,它会通过网络发送数据。我有一个android应用程序来听它。套接字=新套接字();InetSocketAddress InetSocketAddress=新的InetSocketAddress(带,nPort);socket.connect(inetSocketAddress,5000);使用这些代码,我能够在线程内连接。现在我有了另一个从rfid阅读器接收数据的线程。android应用程序和rfid阅读器将在同一个网络中。我的目标是构建android应用程序,在端口4196上监听rfid阅读器。无论何时进行标记扫描,android TCP客户端应用程序都必须读取并记录它。@BiplabDe这并没有回答我的问题。RFID阅读器在传输数据时必须以特定方式格式化扫描数据。那是什么格式?阅读器必须以某种方式划分多个扫描。读者用来与感兴趣的客户沟通的语义是什么?如果你不能回答这个问题,那么你就不能有效地与读者沟通。