0

我正在使用 Android TCP/IP (Wifi) 服务器。服务器套接字设置正确(我认为),但是当我调用接受函数时,应用程序崩溃。在 Catlog 中有一个未处理的接受,但我发现了异常,至少我认为我这样做了。

下面是我的 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

    }
}

Catlog 显示以下内容:

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:线程退出但未捕获异常(组= 0x411df2a0)10-31 16:37:55.653:E /AndroidRuntime(14525): 致命异常: main 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

1

绝对不要在活动构造函数中启动服务器。是一个很好地打开套接字的示例。

于 2013-10-31T15:45:38.040 回答
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 回答