繁体   English   中英

BufferedReader.readline() 只工作一次

[英]BufferedReader.readline() works only once

我正在尝试创建一个行为像客户端的 android 应用程序,我面临的问题是,当从服务器接收字符串数据时,应用程序仅第一次接收它。 当我重新连接套接字时,应用程序再次接收数据。

我使用套接字协议应用程序作为服务器,我在消息的末尾发送一个换行符,甚至连接是活动的,因为我可以将数据发送回服务器。

这是代码

public class MainActivity extends AppCompatActivity {

Thread m_thread;
Socket clientSocket;
PrintWriter out;
boolean fan=false,socket=false,light1=false,light2=false,m_run=false;
int quantity = 0;
String msg;
BufferedReader in = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

public void Start(View view) {
    m_thread = new Thread(new Runnable() {
        @Override
        public void run() {
            m_run = true;
            try {
                clientSocket = new Socket("192.168.1.34", 2001);
                try {
                    out = new PrintWriter(new BufferedWriter(new       OutputStreamWriter(clientSocket.getOutputStream())));
                    out.println("Client Connected");
                    out.flush();
                    in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                    TextView srv_message = (TextView) findViewById(R.id.messageTextView);
                    while(m_run)
                    {
                        if(msg!=null)
                        {

                            srv_message.setText(""+msg);
                        }
                        msg = null;
                    }
                }catch (Exception e){
                    e.printStackTrace();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
    m_thread.start();
}

单击创建连接按钮时将调用 Start 方法。

BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
StringBuilder result = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
    result.append(line);
}

 srv_message.setText(""+result);

使用此代码,它也适用于我。

input =  new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
while (!Thread.currentThread().isInterrupted())
{
            try
            {
                read = input.readLine();
                if (read != null) {
                    // take a handler to Toast the message
                }
            } 
           catch (Exception e) 
           {
                e.printStackTrace();
           }
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM