当我突然改变wifi网络时,我的应用程序中的serversocket会发生什么?我想它会关闭,因为我的设备将获得一个新的IP,至少在TCP中,UDP MulticastSocket也容易出现这种情况吗?以及如何结束以前的服务器套接字线程并在网络更改时启动新线程?一种解决方案是使用超时,另一种解决方案是使用一个标志来指示无限循环是否应该结束,但由于监听套接字是阻塞函数,它将产生异常/错误。
任何想法都将不胜感激! :)
编辑:我的服务器主题示例。
ServerSocket ss = new ServerSocket(4445);
while(true){
Socket socket = ss.accept();
ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
Object obj = in.readObject();
Log.i("TAG", "Received: " + obj.toString());
in.close();
socket.close();
}
答案 0 :(得分:3)
TCPIP连接将中断。所以客户端必须再次连接。
如果重新连接后IP没有改变,UDP就可以了。当然,如果您传输UDP,它将不会对该机器产生影响。
如果你可以处理TCPIP,你应该得到一个例外。
答案 1 :(得分:1)
未绑定到该地址的UDP套接字将保持打开状态,因为它们是无状态的。未绑定到该地址的TCP侦听套接字也将保持打开状态。
连接的TCP套接字可能被切断(RST)或只是停留直到超时发生。
一个鲜为人知的事实是,IP要求设备默认接受指向任何接口上配置的任何地址的数据包,无论数据包到达哪个接口。如果不是这样,路由将被打破。可以使用数据包过滤器来过滤掉具有不匹配地址的数据包,具体取决于接口。