0

Android TCP/IP (Wifi) サーバーで作業しています。サーバーソケットは正しくセットアップされていますが (私はそう思います)、accept 関数を呼び出すとアプリがクラッシュします。カタログには、未処理の受け入れがありますが、例外をキャッチします。少なくとも、そうすると思います。

以下は私の TCPIP クラスです。うまくいかないメソッドは setupserver と呼ばれます。受理前のプリントアウトは見えるが、受理後のプリントアウトは見えない。誰にもアイデアはありますか?すべての提案は大歓迎です!もっと情報を提供する必要があることを教えてください

    public void RunServer(int PortNumber){
    // Try to setup server with given port number
    try {
        ServerSocket = new ServerSocket(PortNumber);
        System.out.println("Server set up");
    } 
    catch (IOException e) {
        Log.e("TCPIPCommunicator", "failed to setup server", e);
        e.printStackTrace();
    }

    // Wait for connection from client
    try {
        System.out.println("Before accept");
        ClientSocket = ServerSocket.accept();
        System.out.println("Ater accept");

    } 
    catch (IOException e) {
        Log.e("TCPIPCommunicator", "failed to accept", e);
        e.printStackTrace();
    }   


    while(true){

        //Send data

        //Recieve data

    }
}

カタログには次のように表示されます。

10-31 16:37:55.653: I/System.out(14525): サーバーのセットアップ 10-31 16:37:55.653: I/System.out(14525): 受け入れ前 10-31 16:37:55.653: D/AndroidRuntime(14525): VM のシャットダウン 10-31 16:37:55.653: W/dalvikvm(14525): threadid=1: キャッチされない例外で終了するスレッド (group=0x411df2a0) 10-31 16:37:55.653: E /AndroidRuntime(14525): 致命的な例外: メイン 10-31 16:37:55.653: E/AndroidRuntime(14525): java.lang.RuntimeException: アクティビティ ComponentInfo を開始できません {com.example.communicationmodule/com.example.communicationmodule. MainActivity}: android.os.NetworkOnMainThreadException

4

2 に答える 2

0

スレッドで無限ループを使用して、常に接続を受け入れる必要がありますが、ClientSocket = ServerSocket.accept(); これは完全に間違っています。ここに少し例があります。

public void listenSocket(){
  try{
    server = new ServerSocket(4444);
  } catch (IOException e) {
    System.out.println("Could not listen on port 4444");
    System.exit(-1);
  }
  while(true){
    ClientWorker w;
    try{
//server.accept returns a client connection
      w = new ClientWorker(server.accept(), textArea);
      Thread t = new Thread(w);
      t.start();
    } catch (IOException e) {
      System.out.println("Accept failed: 4444");
      System.exit(-1);
    }
  }
}

これを参照

于 2013-10-31T15:40:47.190 に答える