ServerSocket不起作用

时间:2014-11-27 15:54:43

标签: java android

我是初学者。我运行以下代码。

 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。 谢谢

2 个答案:

答案 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();
 }