【发布时间】:2016-01-10 08:19:31
【问题描述】:
我想通过套接字连接到我的 android 应用程序。但在服务器端(android 应用程序)我收到 java.net.SocketTimeoutException 错误,在客户端我收到 java.net.ConnectException: Connection refused: connecterror。
我的错误是什么?谢谢
服务器(安卓应用)
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();
}
}
我的客户端无法连接到服务器,我的服务器正在等待连接。
【问题讨论】:
-
你能验证你可以通过
telnet 192.168.240.105 8989连接到socket吗? -
无法在端口 8989 上打开与主机的连接:连接失败。 192.168.240.105 是我的机器 ip,即使使用 localhost 和 127.0.0.1 我也会收到相同的 telnet 错误
-
为什么我的服务器不听 8989?
-
使用模拟器或设备?
-
'192.168.240.105 是我的机器ip,'。 “机器”是什么意思?客户端应使用您的 Android 设备的 ip。您不能在设置中使用模拟器。