当我切换wifi网络时,TCP / UDP serversocket会发生什么?

时间:2011-12-02 16:48:41

标签: java android multithreading sockets wifi

当我突然改变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();
}

2 个答案:

答案 0 :(得分:3)

TCPIP连接将中断。所以客户端必须再次连接。

如果重新连接后IP没有改变,

UDP就可以了。当然,如果您传输UDP,它将不会对该机器产生影响。

如果你可以处理TCPIP,你应该得到一个例外。

答案 1 :(得分:1)

未绑定到该地址的UDP套接字将保持打开状态,因为它们是无状态的。未绑定到该地址的TCP侦听套接字也将保持打开状态。

连接的TCP套接字可能被切断(RST)或只是停留直到超时发生。

一个鲜为人知的事实是,IP要求设备默认接受指向任何接口上配置的任何地址的数据包,无论数据包到达哪个接口。如果不是这样,路由将被打破。可以使用数据包过滤器来过滤掉具有不匹配地址的数据包,具体取决于接口。