java - 当我切换 wifi 网络时,TCP/UDP 服务器套接字会发生什么情况?

标签 java android multithreading sockets wifi

当我突然更改 wifi 网络时,我的应用程序中的 serversocket 会发生什么情况?我猜它会关闭,因为我的设备将获得一个新的 IP,至少在 TCP 中,UDP MulticastSocket 也容易出现这种情况吗?以及当网络发生变化时如何结束之前的Server socket线程并启动一个新的呢?一种解决方案是使用超时,另一种解决方案是使用一个标志来指示无限循环是否应该结束,但由于监听套接字是一个阻塞函数,因此无论如何都会产生异常/错误。

任何想法将不胜感激! :)

编辑:我的服务器线程的示例。

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();
}

最佳答案

TCPIP 连接将中断。因此客户端必须再次连接。

只要重新连接后您的 IP 不发生变化,UDP 就可以了。当然,如果您传输 UDP,这不会对该机器产生影响。

如果是您可以处理的 TCPIP,您应该会得到一个异常。

关于java - 当我切换 wifi 网络时,TCP/UDP 服务器套接字会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8359703/

相关文章:

java - 将 17MB 文本文件解析为 List 如何导致 128MB 堆内存不足?

java - 尝试获取“EEEE MMM d, yyyy”格式的日期时,返回当前日期的无效值

android - 如何使用android中的任何布局将两个 TextView 与背景水平对齐?

java - 如何在Java中使用转义字符分割或解析字符串

Java,将日期设置为 0/0/0

Android:从内容 URI 获取文件 URI?

android - 我可以在同一个 Activity 中同时运行多个加载程序吗?

java线程不同的流

c++ - (最好是提升)无锁数组/vector/ map /等?

Python SARIMA 模型自动使用 CPU 的所有核心。如何?