写一个本地服务,每次运行之后,之前的端口号使用不了,报错Address already in use 地址已在使用中,端口号被占用,老烦了,每次都得换一个端口,老不稳定了,这个得想办法解决,经过几天挣扎,找到解决方法了。
问题报错日志:
java.net.BindException: Address already in use
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Net.java:454)
at sun.nio.ch.Net.bind(Net.java:446)
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:214)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
at org.java_websocket.server.WebSocketServer.doSetupSelectorAndServerThread(WebSocketServer.java:567)
at org.java_websocket.server.WebSocketServer.run(WebSocketServer.java:367)
at java.lang.Thread.run(Thread.java:761)
解决:
其实很简单,就是退出或者应用被杀死时,结束掉当前端口得服务,再次启用时重新启动就好,而我这边得情况是,停止当前端口得服务,下次重新启动服务,这个端口号还能继续使用,其他情况,大家可以通过指令(cmd)杀掉这个端口的服务,具体方法百度一下。
例如:
override fun onDestroy() {
// 标记服务关闭
serviceIsLive = false
// 移除通知
stopForeground(true)
super.onDestroy()
//应用被杀死就停掉所有服务,这个后面需要优化
stopAndServer()
SocketServer.webStop()
Log.e(TAG, "onDestroy")
}