Android 服务可能重用?

Android Service possible reuse?

我正在做一个项目,其中 2 个人通过 wifi-hotspot 连接(一个作为热点,另一个通过 wifi 连接到它)并且他们可以交换消息(我稍后会制作文件)。

我使用两个服务创建套接字连接(内部有两个线程,一个用于发送信息,另一个用于读取信息),一个用于服务器,另一个用于客户端。通信应该是双向的,可以由他们中的任何一个开始,这就是我遇到问题的地方。

基本上在开始时,我启动服务并启动线程来接收(我设置一个动作并在 onStartCommand 方法上检查它,以了解要创建哪个线程)。然后一个人有一个按钮,如果他们按下它,他们就可以发送消息。如果有人发送消息,我将再次启动该服务(并将操作设置为 SEND,以便我可以启动线程来发送消息)。

问题是,如果我再次启动服务(发送),我将得到套接字已在使用的异常(已经尝试执行 setReuseAddress(true) 但它不起作用)。我对流有类似的问题,它们不会 "related" (一侧的输出流不是另一侧输入流的对应者 - 它们每次创建时都会交换 header ).

你们认为我如何解决这个问题?我可以将流和套接字设置为静态,并检查它们是否已经创建,但似乎没有太一致了。如果你们需要,我可以 post 代码,但它会有点长

只需检查套接字是否正在使用并关闭它

private boolean isPortInUse(String host, int port) {
  // Assume no connection is possible.
  boolean result = false;

  try {
    (new Socket(host, port)).close();
    result = true;
  }
  catch(SocketException e) {
    // Could not connect.
  }

  return result;
}