2016-01-10 3 views
1

Я хочу подключиться через socket к моему андроиду app.but на стороне сервера (приложение для Android) Я получаю ошибку java.net.SocketTimeoutException, а на стороне клиента я получаю ошибку java.net.ConnectException: Connection refused: connect. Какая у меня ошибка? спасибоandroid socket server programming

сервер (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(); 
    } 
} 

мой клиент не может подключиться к серверу и мой сервер ждать подключения.

+0

Вы можете проверить, что вы можете подключиться к сокету через «telnet 192.168.240.105 8989'? – miensol

+0

Не удалось открыть соединение с хостом, на порту 8989: Не удалось подключиться. 192.168.240.105 - это мой компьютер ip, даже с localhost и 127.0.0.1. Я получаю ту же ошибку для telnet – farhad

+0

, почему мой сервер не прослушивает 8989? – farhad

ответ

-1

Когда вы строите ServerSocket(8989), вы связываетесь с подстановочным адресом сетевых интерфейсов, доступных на эмуляторе и устройстве Android.

Однако как у Android-эмулятора, так и на реальном устройстве есть собственный сетевой интерфейс (-ы), и таким образом это его собственные IP-адреса. IP-адрес вашей клиентской программы (разработчика) не совпадает с IP-адресом эмулятора и устройства Android. Другими словами, вы не можете подключиться к сокету, созданному в приложении Android, потому что используете неправильный адрес.

This answer должен руководствоваться тем, как узнать адрес.

+0

Он не использует неправильный адрес. Слушающий сокет, связанный с подстановочным адресом, будет принимать соединения с любого из локальных IP-адресов, – EJP

+0

Да, но он пытается использовать свой адрес i-й версии для разработки **, а устройство/эмулятор Android будет иметь разные локальные адреса. – miensol

+0

Вы имеете в виду, что «клиент использует ip машины, на которой он работает». Или это собственный ip. Ваш разговор о шаблоне не имеет смысла. – greenapps