server = new ServerSocket(PORT);
不会在我的应用程序上调用 NetworkOnMainThreadException,我认为它应该这样做并编辑代码以在另一个线程上运行,同时
socket= new Socket(ADDRESS,PORT);
确实调用 NetworkOnMainThreadException 正确。我错过了什么还是应该修复的错误?
server = new ServerSocket(PORT);
不会在我的应用程序上调用 NetworkOnMainThreadException,我认为它应该这样做并编辑代码以在另一个线程上运行,同时
socket= new Socket(ADDRESS,PORT);
确实调用 NetworkOnMainThreadException 正确。我错过了什么还是应该修复的错误?
为什么要呢?new ServerSocket(...)
只是本地操作。它不涉及任何实际的网络活动,而new Socket(...)
确实如此,并且最多可以阻塞一分钟左右。
当你调用 new Socket(ADDRESS,PORT);
private Socket(SocketAddress address, SocketAddress localAddr,
413 boolean stream) throws IOException {
414 setImpl();
415
416 // backward compatibility
417 if (address == null)
418 throw new NullPointerException();
419
420 try {
421 createImpl(stream);
422 if (localAddr != null)
423 bind(localAddr);
424 if (address != null)
425 connect(address);
426 } catch (IOException e) {
427 close();
428 throw e;
429 }
430 }
它创建流。然而server = new ServerSocket(PORT);
public ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException {
230 setImpl();
231 if (port < 0 || port > 0xFFFF)
232 throw new IllegalArgumentException(
233 "Port value out of range: " + port);
234 if (backlog < 1)
235 backlog = 50;
236 try {
237 bind(new InetSocketAddress(bindAddr, port), backlog);
238 } catch(SecurityException e) {
239 close();
240 throw e;
241 } catch(IOException e) {
242 close();
243 throw e;
244 }
245 }
注意没有connect();
任何这些方法涉及网络操作,因此您不会得到NetworkOnMainThreadException