我是初学者。我运行以下代码。
import android.app.Activity;
import android.os.Bundle;
import android.os.NetworkOnMainThreadException;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class MainActivity extends Activity {
ServerSocket server = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
server = new ServerSocket(4444);
} catch (IOException e) {
e.printStackTrace();
}
try {
Socket client = server.accept();
} catch (IOException e) {
e.printStackTrace();
}
}
}
但是我只能在运行时看到app在模拟器中停止工作的消息。我发现语句Socket client = server.accept();上发生了错误。我认为这个陈述将等到客户请求被接受为止。这些用户权限也会被添加。
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
我正在使用android studio。和sdk 14。 谢谢
答案 0 :(得分:0)
你无法在UI线程上运行网络,我认为你需要while(1)在接受时,试试这个:
new Thread(new Runnable() {
public void run() {
try {
Socket client = server.accept();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
答案 1 :(得分:0)
Android UI Thread永远不会长时间操作。所以你应该在你的代码中启动线程。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
server = new ServerSocket(4444);
} catch (IOException e) {
e.printStackTrace();
}
new thread(){
void run(){
server.accept();
}
}.start();
}