3
server = new ServerSocket(PORT);

私のアプリケーションでNetworkOnMainThreadExceptionを呼び出さないので、別のスレッドで実行するようにコードを編集する必要があります。

socket= new Socket(ADDRESS,PORT);

NetworkOnMainThreadExceptionを適切に呼び出します。私は何かを見逃しましたか、それとも修正する必要があるエラーですか?

4

2 に答える 2

3

なぜそれが必要ですか?new ServerSocket(...)単なるローカル操作です。実際のネットワークアクティビティは含まれませんが、含まnew Socket(...)れ、最大1分ほどブロックされる可能性があります。

于 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 に答える