3
server = new ServerSocket(PORT);

不会在我的应用程序上调用 NetworkOnMainThreadException,我认为它应该这样做并编辑代码以在另一个线程上运行,同时

socket= new Socket(ADDRESS,PORT);

确实调用 NetworkOnMainThreadException 正确。我错过了什么还是应该修复的错误?

4

2 回答 2

3

为什么要呢?new ServerSocket(...)只是本地操作。它不涉及任何实际的网络活动,而new Socket(...)确实如此,并且最多可以阻塞一分钟左右。

于 2013-02-19T23:41:04.827 回答
1

当你调用 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

于 2013-02-19T23:49:24.657 回答