Java Android应用程序TCP/IP服务器在调用accept时崩溃
我正在安卓TCP/IP(Wifi)服务器上工作。serversocket设置正确(我想),但当我调用accept函数时,应用程序崩溃。在Catlog中有一个未处理的接受,但我捕捉到了异常,至少我认为我捕捉到了 下面是我的TCPIP类,出错的方法称为setupserver。我看到接受前打印的,但不是接受后打印的。有人知道吗?欢迎所有建议!请让我知道我需要提供更多信息Java Android应用程序TCP/IP服务器在调用accept时崩溃,java,android,tcp,Java,Android,Tcp,我正在安卓TCP/IP(Wifi)服务器上工作。serversocket设置正确(我想),但当我调用accept函数时,应用程序崩溃。在Catlog中有一个未处理的接受,但我捕捉到了异常,至少我认为我捕捉到了 下面是我的TCPIP类,出错的方法称为setupserver。我看到接受前打印的,但不是接受后打印的。有人知道吗?欢迎所有建议!请让我知道我需要提供更多信息 public void RunServer(int PortNumber){ // Try to setup ser
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):关闭虚拟机
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:无法启动活动组件信息{com.example.communicationmodule/com.example.communicationmodule.MainActivity}:android.os.NetworkOnMainThreadException您应该在线程中使用不定式循环来始终接受连接
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);
}
}
}
绝对不要在活动构造函数中启动服务器。是一个很好地打开套接字的示例。另一个重复的示例与当前的实际问题android.os.NetworkOnMainThreadException无关。作为一个设计问题,你的建议可能有价值,但它并不总是你想要的。特别是在一般不打算用作服务器的设备中,可能不希望常规地接受传入连接,而只希望在特定情况下这样做。感谢您的评论谢谢您的回答,我将服务器代码放在一个线程中,例外情况消失了。