我是新手,如果我问哑巴问题,我感到抱歉.
我必须与服务器建立套接字连接.
客户端(Android设备)必须向服务器发送消息,并等待确认消息.然后,如果服务器在30秒钟内未从客户端收到任何消息,则发送请求确认消息的请求.
我所做的是第一部分:客户端发送消息并读取响应.
我要问的是:客户端如何等待服务器发出的可能消息?
这是我写的代码:
在onCreate方法中:
Thread myThread = new Thread(new myRunnable());
myThread.start();
这是myRunnable:
public class myRunnable implements Runnable{
public void run(){
try{
Socket socket = new Socket(serverIp, serverPort);
InputStream is = socket.getInputStream();
OutputStream out = socket.getOutputStream();
out.write(byteBuffer.array());
out.flush();
byte[] bbb = new byte[1024];
// Receive message from server
int bytesToRead= is.read(bbb);
is.close();
out.close();
socket.close();
连续读取操作返回-1,那么如何保持等待服务器消息?
非常感谢您的任何建议.
解决方法:
您不应该关闭信息流.关闭流时,与服务器的通信也会关闭.通常,服务器通信发生在无限循环中.像这样:
public class myRunnable implements Runnable{
public void run(){
try{
Socket socket = new Socket(serverIp, serverPort);
InputStream is = socket.getInputStream();
OutputStream out = socket.getOutputStream();
out.write(byteBuffer.array());
out.flush();
byte[] bbb = new byte[1024];
while (true) {
// Read next message.
bytesToRead = is.read(bbb);
// handle message...
// If you need to stop communication use 'break' to exit loop;
}
is.close();
out.close();
socket.close();
因此线程停止在bytesToRead = is.read(bbb)行上,直到服务器发送任何消息为止,此后它将以您想要的任何方式处理消息并返回读取下一条消息.如果需要停止通讯,请使用break退出循环.