我正在使用Android TCP / IP(Wifi)服务器。 serversocket设置正确(我认为),但是当我调用accept函数时,应用程序崩溃了。在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:线程退出时未捕获异常(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
答案 0 :(得分:1)
绝对不要在活动构造函数中启动服务器。 Here是一个很好地打开套接字的例子。
答案 1 :(得分: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);
}
}
}