我一直在尝试在两个 Android 模拟器之间实现一个简单的套接字通信,但似乎无法实现。
我的服务器:
public void run() {
if (SERVERIP != null) {
try {
serverStatus.setText("My IP: " + SERVERIP);
serverSocket = new ServerSocket(6798);
serverStatus.setText("ServerSocket Created");
}
catch(Exception e) {
e.printStackTrace();
}
try {
while (true) {
serverStatus.setText("waiting for client");
Socket client = serverSocket.accept();
serverStatus.setText("Connected.");
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
String line = in.readLine();
serverStatus.setText(line);
in.close();
client.close();
}
}
catch(Exception e) {
e.printStackTrace();
}
}
else
serverStatus.setText("Couldn't detect internet connection.");
}
我的客户:
try {
InetAddress ina = InetAddress.getByName("10.0.2.2");
socket = new Socket(ina, 6789);
}
catch (Exception e) {
e.printStackTrace();
}
try {
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
out.println("Hey Server!");
dispText.setText("sent");
}
catch (Exception e) {
e.printStackTrace();
}
客户端继续显示“已发送”消息,但服务器并未超出“等待客户端”(卡在阻塞状态accept()
)。我在我的 Windows 机器上使用 telnet 将服务器模拟器控制台上的端口 6789 重定向到 6798。我还尝试关闭我的防火墙,并在此处提出的类似问题上发布了其他建议。请帮助,因为似乎无法理解它,并且觉得我犯了一个非常愚蠢的错误。
另外,任何人都可以告诉我,如果服务器仍然卡在accept()
. 或者,只要它正在侦听端口,服务器没有响应对客户端来说无关紧要吗?