我有一个应用程序,我的设备在2个热点配置文件之间切换。我们称他们为HotSpot A和HotSpot B. 我在端口上的HotSpot A上创建2个服务器套接字,例如23和24。 将我的HotSpot配置文件切换到B后,拆除这些服务器套接字并在HotSpot B端口23,24和25上创建3个服务器套接字。 现在大部分时间都适用。但是大约10%的时间,我在端口23或24或两者上得到套接字绑定异常。 这就是我创建服务器套接字的方式: -
public ServerSocketThread(Context context,String serviceName,int port) throws IOException {
try {
mContext =context;
_serviceName=serviceName;
socket = new ServerSocket();
socket.setReuseAddress(true);
socket.bind(new InetSocketAddress(port));
socket.setReceiveBufferSize(10000);
localPort=socket.getLocalPort();
peerHandlerMap= new HashMap<Integer,NSDMessageHandler>();
Logger.i(NSDConstants.TAG, "Socket Started Port Number " + localPort );
} catch (IOException e) {
Logger.e(NSDConstants.TAG, "IO Exception while creating server Socket");
e.printStackTrace();
socket=null;
pool.shutdownNow();
throw e;
}
}
我尝试了一种方法,我关闭热点20秒,然后重新启动最后一个配置文件。我想给Server Socket端口一些时间来拆卸。但很少它再次开始工作。大多数时候我收到同样的例外。
我知道原因可能是旧的端口/地址仍在使用中。 任何解决方案?