我正在做一个项目,其中2人通过wifi-hotspot连接(一个作为热点,另一个通过wifi连接到它),他们可以交换消息(我将在以后制作文件)。
我使用两个服务创建套接字连接(内部有两个线程,一个用于发送信息,另一个用于读取信息),一个用于服务器,另一个用于客户端。通信应该是双向的,并且可以由它们中的任何一个启动,这是我遇到问题的地方。
基本上在开始时,我启动服务并启动线程接收(我设置一个动作并在方法onStartCommand上检查它,以了解要创建的线程)。然后一个人有一个按钮,如果他们按下它,他们就可以发送消息。如果一个人发送消息,我将再次启动该服务(并将操作设置为SEND,以便我可以启动线程发送消息)。
问题是,如果我再次启动服务(发送),我将获得已经在使用的套接字的例外(已经尝试过执行setReuseAddress(true)并且它不起作用)。我对流有类似的问题,它们不会“相关”(来自一方的输出流不是来自另一方的输入流的相应输出 - 它们每次创建时都会交换标题)。
你们怎么认为我可以解决这个问题?我可以将流和套接字设置为静态,并检查它们是否已经创建,但这似乎不太一致。如果你们需要,我可以发布代码,但它会有点长
答案 0 :(得分:0)
只需检查套接字是否正在使用并关闭它
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;
}