server = new ServerSocket(PORT);
不会在我的应用程序上调用NetworkOnMainThreadException,我认为它应该执行并编辑代码以在另一个线程上运行
socket= new Socket(ADDRESS,PORT);
会正确调用NetworkOnMainThreadException。我错过了什么或是否应该修复错误?
答案 0 :(得分:3)
为什么要这样? new ServerSocket(...)
只是一个本地操作。它不涉及任何实际的网络活动,而new Socket(...)
可以,并且它可以阻止长达一分钟左右。
答案 1 :(得分:1)
当你拨打新的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