我想通过套接字连接到我的 Android 应用程序。但在服务器端(Android 应用程序)我得到 java.net.SocketTimeoutException
错误,在客户端我得到 java.net.ConnectException: Connection refused: connect
错误。
我的错误是什么?谢谢
服务器(Android 应用程序)
public class ServerSocketTask extends AsyncTask<Void, Void, String> {
final StackTraceElement se = Thread.currentThread().getStackTrace()[2];
private String data = null;
@Override
protected String doInBackground(Void... params) {
Log.d(se.getClassName() + "." + se.getMethodName(), "start");
try {
ServerSocket serverSocket = new ServerSocket(8989);
serverSocket.setSoTimeout(50000);
Socket socket = serverSocket.accept();
socket.setKeepAlive(true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
int readed = in.read();
Log.d("","readed bytes : "+readed);
String line;
while ((line = in.readLine()) != null){
Log.i("","line : "+ line);
}
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
ServerSocketTask.this.data = result;
}
public String getData() {
return data;
}
}
客户端
public static void main(String[] args) {
int port;
try (Socket socket = new Socket("192.168.240.105", 8989)) {
String customerId = "123";
String requestId = Configuration.getProperty("requestId");
ClientService result = new ClientService();
String makeRequest = result.objectToJson(customerId, requestId);
PrintWriter writer = new PrintWriter(socket.getOutputStream());
writer.write(makeRequest);
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
我的客户端无法连接到服务器,我的服务器正在等待连接。
最佳答案
当您构造 ServerSocket(8989)
时,您将绑定(bind)到 Android 模拟器/设备上可用的网络接口(interface)的通配符地址。
然而,Android 模拟器和真实设备都有自己的网络接口(interface),因此它有自己的 IP 地址。您的客户端程序(开发机)IP地址与android模拟器/设备的IP地址不同。换句话说,您无法连接到 Android 应用程序中创建的套接字,因为您使用了错误的地址。
This answer应该指导您如何查找地址。
关于Android Socket服务器编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34703464/