我目前正在尝试在 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>
最佳答案
FD_ 的回答是正确的,但我想澄清一下。 accept()
调用 wait()
。所以线程将等待连接。
您可能希望从其他线程调用此类代码。
关于Android 没有通过 serverSocket.accept();,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21487675/