这是我第一次在堆栈溢出时问一个问题,所以请耐心等待。 我会尽量保持这个简短。
我正在编写一个简单的客户端套接字android应用程序。 我正在连接的服务器有一个名为Alice的聊天机器人。 我已经设法连接到服务器,我收到消息“来自alice的Hello”但是线程似乎停止了,因为我没有收到任何更多消息。
以下是一些代码:
@Override
public void run() {
try
{
while (true)
{
String _input = _rd.readLine();
if (_input != null)
{
_field.append("Alice : "+ _input+"\n");
}
else
{
_field.append("null");
}
sleep(50);
}
} catch (IOException e) {
e.printStackTrace();
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
正如您所看到的,即使我没有收到消息,我也试图通过附加“null”来解决我的代码问题,但是我的EditText中没有显示这个。
当用户按下按钮时,我从我的主Activity类中调用.start()
。
@Override
public void onClick(View arg0) {
setContentView(R.layout.second);
InitiateSecondFrame();
_cs = new ClientSocket();
String _check = _cs.EstablishConnection(_host.getText().toString(),
Integer.parseInt(_port.getText().toString()),
(EditText)findViewById(R.id.historyField));
_cs.start();
Toast.makeText(getApplicationContext(), _check, 100).show();
SaveHostPort(_host.getText().toString(), _port.getText().toString());
}
});
ClientSocket
类由Thread扩展并实现Runnable,我也尝试过只是扩展或实现。
我根本没有收到任何错误消息。
我希望我提供的信息足以让你意识到什么是错的。
记住我是多线程和套接字的新手,所以我可能错过了一些基本的东西。
答案 0 :(得分:1)
如果有帮助,这就是你开始一个主题的方法:
Runnable runnable = new MyRunnableClass(); // has the run() method
new Thread(runnable).start();
答案 1 :(得分:0)
_rd.readLine();
这是你的问题。它将阻止并永远等待来自远程系统的输入,并且只会在从远程系统检测到换行符时返回收到的内容。
答案 2 :(得分:0)
线程未停止。它只是在等待消息传来。 _rd.readLine()
将阻塞,直到读取某行(以换行符结尾),或者直到连接结束。因此,如果Alice保持连接打开并且不发送任何内容,readLine将永远阻止,并且不会打印您的“空”消息。