我目前正在尝试在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>
答案 0 :(得分:1)
FD_的答案是正确的,但我想稍微澄清一下。 accept()
来电wait()
。所以线程将等待连接。
您可能希望从其他主题调用此类代码。
答案 1 :(得分:0)
ServerSocket.accept()
等待设备连接到设备的IP地址上的套接字端口(在您的情况下为25555)。它只会在有新连接时继续并返回Socket
。
您可以在docs中找到更多信息。