我正在学习与Android socket编程。我有两个移动设备。两者都连接到不同的WiFi网络。我的服务器应用程序在一个设备上运行,客户端应用程序在另一个设备上运行。我无法用不同的WiFi网络连接客户端和服务器。为什么?
请帮助我,并为我的沟通不畅感到抱歉。
class ClientSideThread extends Thread {
String response;
@Override
public void run() {
try {
socket = new Socket("192.168.1.111",8085);
OutputStream outToServer = socket.getOutputStream();
DataOutputStream out = new DataOutputStream(outToServer);
out.writeUTF("hi");
InputStream inFromServer = socket.getInputStream();
DataInputStream in = new DataInputStream(inFromServer);
response = in.readUTF();
out.close();
in.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
response = "UnknownHostException: " + e.toString();
} catch (IOException e) {
e.printStackTrace();
response = "IOException: " + e.toString();
}
}
}
服务端代码:
private class SocketServerThread extends Thread {
@Override
public void run() {
try {
serverSocket = new ServerSocket(socketServerPORT);
while (true) {
Socket socket = serverSocket.accept();
sIpAddress = socket.getInetAddress();
sPort = socket.getPort();
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line;
StringBuilder sb = new StringBuilder();
if ((line = reader.readLine()) != null) {
sb.append(line);
}
message = sb.toString();
printWriter = new PrintWriter(socket.getOutputStream());
printWriter.println(message);
printWriter.flush();
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
String sDisplayMsg = "Replay:" + message;
TextView rowTextView = new TextView(MainActivity.this);
rowTextView.setText(sDisplayMsg);
linearLayout.addView(rowTextView);
}
});
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
你提到他们在两个不同的WiFi网络上。我怀疑这两个网络没有连接。
甚至在您尝试使用android之前,请检查服务器设备的IP地址是否可以从客户端网络访问。您可以将笔记本电脑或台式机连接到客户端网络,并发出ping命令ping 192.168.1.111
,以查看目标IP是否可达。如果可达,执行telnet 192.168.1.111 8085
。如果telnet不能连接并且ping可达,则说明服务器套接字没有绑定到8085端口。如果ping本身不可达,那么这两个路由器可能没有互连。服务器设备上可能没有开启ping功能。您可以发出tracert 192.168.1.111
来查看网络数据包的传输距离。查找目标服务器的网关IP。如果没有找到,这两个路由器可能没有连接,你需要将它们连接起来。