两个Android设备一个WebSocket的服务端,一个客户端。
服务端经常被拿着乱跑,一会儿切这个网络,一会切另外一个网络,一会儿被人为强杀。。。正常stop流程我就不走。。。
测试不断提问题,疯了。。。
java.net.BindException: Address already in use
网上查找资料,没有几个玩儿Android和Java的了。。。悲哀!!!
反正是端口被占了。。。
以我本地应用开发的角度思考,我TM进程都挂了,你留着端口号干啥。。。
后来发现这玩意貌似,不是进程控制的,是系统控制的,比如Linux,会保持这个端口号一段时间,因为我发现过一会儿就可以连接了。。。(1分钟?3分钟?)
再查,我是面向百度、面向CSDN编程的,继续。。。
人家都说,socket可以设置个属性 SO_REUSEADDR
对于一个只玩本地开发的人来说,这个玩意咋设置啊。。。
不废话了。。。。。上代码
websocket里的
WebSocketServer.java
ServerSocket socket = server.socket();
socket.setReuseAddress(isReuseAddr());
其实就是socket有这个接口,重复使用端口号(慎用)。
如果直接使用websocket的话,人公开了一个接口。。
/**
* Setter for soReuseAddr
* <p>
* Enable/disable SO_REUSEADDR for the socket
*
* @param reuseAddr whether to enable or disable SO_REUSEADDR
* @since 1.3.5
*/
public void setReuseAddr(boolean reuseAddr) {
this.reuseAddr = reuseAddr;
}
于是咱们就这么用就行了
ServerSocket serverSocket = new ServerSocket(this, port);
serverSocket.setReuseAddr(true);
serverSocket.start();
以上仅供Android Java参考。
大家可以试试,我强杀应用后,再次连接是可以成功的。