android java server_Java ServerSocket和Android LocalServerSocket

我已经实现了我自己的

android服务,如下所示

public class MyService extends Service {

private static final String TAG = "MyService";

private Server mServer;

private LocalServerSocket server;

@Override

public IBinder onBind(Intent intent) {

return null;

}

@Override

public void onCreate() {

Log.d(TAG, "onCreate");

mServer = new Server();

mServer.start();

}

@Override

public void onDestroy() {

Log.d(TAG, "onDestroy");

if(server != null){

try {

server.close();

} catch (IOException e) {

Log.d(TAG, "exception in server close");

e.printStackTrace();

}

}

}

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

Log.d(TAG, "onStart");

return START_STICKY;

}

class Server extends Thread {

@Override

public void run() {

try {

server = new LocalServerSocket("my.socket");

while (true) {

LocalSocket receiver;

try{

receiver = server.accept();

}catch(SocketException e){

Log.d(TAG, "SocketException");

break;

}

catch(IOException e){

Log.d(TAG, "IOException");

break;

}

if (receiver != null) {

Log.d(TAG, "Got Data in receiver");

}

receiver.close();

}

} catch (IOException e) {

Log.d(TAG, "one more");

e.printStackTrace();

}

}

}

}

我面临的问题是,如果我的LocalServerSocket在accept()中阻塞,那么在OnDestroy()中调用server.close()不会抛出SocketException.因此,下次启动服务时,我会收到“地址已被使用异常”.如果不是LocalServerSocket,我使用java.net.Socket,然后我得到所需的行为.我想知道为什么LocalServerSocket的行为与Java套接字不同.在我的情况下,我如何走出while循环.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值