2017-01-30 11 views
2

Im работает над андроид-студией, и я пытаюсь подключиться к серверу, который я создал, без каких-либо успехов. Мне удалось подключить клиента к серверу, когда клиент был моим компьютером успешно, когда я использовал этот код:Android-клиент и серверные сокеты

socket = null; 
        try 
        { 
         Log.e("client", "Attempting to connect to serverrrrrr."); 
         socket = new Socket(hostname, portnumber); 
         Log.e("client", "Connected ! "); 

, когда имя хоста, как: private static final String hostname= "localhost"; private static final int portnumber=55555;

тогда я понял, что он не работает, когда Im пытается подключиться к клиенту с телефона, потому что мне нужно поставить РЕАЛЬНЫЕ ip-адрес, а не объект localhost. Поэтому я пробовал это:

private static final String hostname= "10.0.0.1"; 
private static final int portnumber=55555; 

с тем же кодом выше, и это не сработало. Он просто остается в линии: новый Socket ... и его не двигается вперед и, следовательно, не подключается суккусивно. Что я делаю не так ?

У меня есть этот кусок кода: <uses-permission android:name="android.permission.INTERNET"/>

и я сделал «перенаправление портов». Что еще я могу сделать ?

01-30 18:16:47.760 16158-16210/com.omer.tictactoemultiplayer W/System.err: java.net.ConnectException: failed to connect to /10.0.0.1 (port 55555): connect failed: ETIMEDOUT (Connection timed out) 

код сервера: `общественный класс Сервер расширяет тему {

private static final int portnumber = 55555; 

@Override 
public void run() { 

    ServerSocket serverSocket = null; 
    try { 
     Log.e("Server", "Server starting at port number: " + portnumber); 
     serverSocket = new ServerSocket(portnumber); 

     while(true) 
     { 
      // Client connecting. 
      Log.e("Server", "Waiting for clients to connect ..."); 
      Socket socket1 = serverSocket.accept(); 
      Log.e("Server", "Client one has connected."); 

      Socket socket2 = serverSocket.accept(); 
      Log.e("Server", "Client two has connected."); 
      //Send message to the server.1 

      BufferedWriter bw1 = new BufferedWriter(new OutputStreamWriter(socket1.getOutputStream())); 
      bw1.write("found"); 
      bw1.newLine(); 
      bw1.flush(); 

      BufferedWriter bw2 = new BufferedWriter(new OutputStreamWriter(socket2.getOutputStream())); 
      bw2.write("found"); 
      bw2.newLine(); 
      bw2.flush(); 

      new ServerThread(socket1,socket2).start(); 
     } 
    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 

} 

} `

+0

Комментарии для расширенного обсуждения; этот разговор был [перемещен в чат] (http://chat.stackoverflow.com/rooms/138851/discussion-on-question-by-levi-omer-android-client-and-server-sockets). –

ответ

0

Если вы пытаетесь подключиться к ПК с телефона, то вы должны изменить личное static final Строка hostname = "localhost" для

приватное статическое окончательное имя строки = ваш-pc-ip

Вы можете увидеть свой IP с помощью команды Ipconfig в окнах, и IFCONFIG в Linux

+0

Я пробовал это, и, как вы можете видеть, я изменил его, и он никогда не работал. –

+0

Где реализован ваш сервер, Windows? виртуальная машина? –

+0

В андроид студии. –

0

Если вы только изменили хост с локального хоста к IP вашего компьютера, чем код Java, который работает так хорошо на вашем компьютере не будет делать для Android.

Как и тогда, вы должны поместить интернет-код в поток или AsyncTask.

Если вы этого не сделаете, у вас будет NetworkOnMainThreadException, который будет хорошо виден на лодке.

+0

Человек, это, конечно, еще одна тема. Как вы можете видеть, я сказал, что это сработало с localhost, но не с моим ip. Если он работал один раз, itmeans все в порядке, кроме ip-проблемы. Понял? –

+0

Я нашел исключение после ожидания 3 минуты. Я редактировал. –