Android 为什么ServerSocket没有';当套接字调用NetworknOnMainThread时,是否调用NetworknOnMainThread?

Android 为什么ServerSocket没有';当套接字调用NetworknOnMainThread时,是否调用NetworknOnMainThread?,android,exception,network-programming,Android,Exception,Network Programming,不在我的应用程序上调用NetworkOnMainThreadException,我认为它应该这样做,并在运行时编辑代码以在另一个线程上运行 server = new ServerSocket(PORT); 是否正确调用NetworkOnMainThreadException。我是否遗漏了什么,或者是应该纠正的错误?为什么要这样做newserversocket(…)只是一个本地操作。它不涉及任何实际的网络活动,而新套接字(…)则涉及,并且它可以阻止长达一分钟左右。当您调用新套接字(地址、端口)时

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

server = new ServerSocket(PORT);

是否正确调用NetworkOnMainThreadException。我是否遗漏了什么,或者是应该纠正的错误?

为什么要这样做
newserversocket(…)
只是一个本地操作。它不涉及任何实际的网络活动,而新套接字(…)则涉及,并且它可以阻止长达一分钟左右。

当您调用新套接字(地址、端口)时

它创建了流。而
server=newserversocket(端口)

publicserversocket(int-port、int-backlog、InetAddress-bindAddr)引发IOException{
230 setImpl();
231中频(端口<0 | |端口>0xFFFF)
232抛出新的IllegalArgumentException(
233“端口值超出范围:”+端口);
234如果(积压工作<1)
235=50;
236试试{
237 bind(新的InetSocketAddress(bindAddr,端口),backlog);
238}捕获(安全异常e){
239关闭();
240投e;
241}捕获(IOE异常){
242关闭();
243投e;
244        }
245    }

注意没有
connect()
不允许这些方法涉及网络操作,因此您将不会得到
NetworkMainThreadException

,因为~99.44%,Android应用程序正在创建常规的
套接字,而不是
服务器套接字
,我猜他们没有为
服务器套接字
设置异常。也就是说,使用任何套接字进行网络I/O都不是一个好主意,如果您希望他们添加异常,请在上提交功能请求。感谢您的快速响应没有
connect()
这一事实并不是一个充分的答案。关键是网络上根本没有任何活动,也没有阻塞。connect()方法对acutal网络进行阻塞。因此在主线程上没有网络?有很多方法可以进行网络操作和阻塞<代码>连接()
就是其中之一。它没有被调用的事实并不是一个充分的解释。解释是它们都没有被调用,而不是说它们都没有被调用,我展示了被调用的源代码。回答问题可以有不同的方法。不仅仅是你认为正确的答案。仅仅引用源代码根本不是答案,而且“注意没有
connect()
”仍然不够。
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     }
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    }