Android没有超过serverSocket.accept();

时间:2014-01-31 18:43:14

标签: android sockets

我目前正在尝试在android中打开一个套接字,但我的代码仍然坚持一句话。

  private ServerSocket serverSocket;
  private Socket clientSocket;
  private PrintWriter out;
  private BufferedReader in;

  public void run(){
    Log.i("DebugMessage", "ServerThread received pulse. Trying to open socket now!");
    try{
      serverSocket = new ServerSocket(25555);
      Log.i("DebugMessage", "serverSocket is open, waiting for the clientSocket.");
      clientSocket = serverSocket.accept();
      Log.i("DebugMessage", "serverSocket and clientSocket are both open! Waiting for in-/output!");

      in = new BufferedReader(
             new InputStreamReader(clientSocket.getInputStream()));
      out = new PrintWriter(clientSocket.getOutputStream(), true);

      String input = in.readLine();
      out.println("received: " + input);

      in.close();
      out.close();

    } catch(Exception e) {
        Log.i("DebugMessage", "Failed to open socket!");
    e.printStackTrace();
    }
  }

clientSocket = serverSocket.accept();,它一直坚持下去。 现在我已经看过其他几次这个问题,但给出的答案完全不同。 Here正在说它是关于他的代码的,并且here被称为问题在于模拟器。现在我的问题是,我的模拟器或我的代码存在问题,如果是我的代码,怎么可能修复它?

顺便说一句,我已将这些行添加到AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET" >
</uses-permission>

2 个答案:

答案 0 :(得分:1)

FD_的答案是正确的,但我想稍微澄清一下。 accept()来电wait()。所以线程将等待连接。 您可能希望从其他主题调用此类代码。

答案 1 :(得分:0)

ServerSocket.accept()等待设备连接到设备的IP地址上的套接字端口(在您的情况下为25555)。它只会在有新连接时继续并返回Socket

您可以在docs中找到更多信息。