2017-01-30 4 views
2

Ich arbeite an Android Studio, und ich versuche, einen Server, den ich gemacht, ohne Erfolg.Ich konnte den Client mit dem Server verbinden, wenn der Client ist mein Computer erfolgreich, wenn ich verwendet dieser Code:Android Client und Server-Sockets

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

, wenn der Host-Name ist wie: private static final String hostname= "localhost"; private static final int portnumber=55555;

dann erkannte ich, dass es nicht funktioniert, wenn im auf dem Client aus dem Telefon zu verbinden versuchen, weil ich eine REAL setzen müssen IP-Adresse und nicht die localhost-Sache. Daher habe ich Folgendes versucht:

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

mit dem gleichen Code oben, und es hat nicht funktioniert. Es bleibt nur in der Reihe: neuer Sockel ... und es bewegt sich nicht vorwärts und daher nicht erfolgreich verbunden. Was mache ich falsch ?

Ich habe auch dieses Stück Code: <uses-permission android:name="android.permission.INTERNET"/>

und ich habe "Port-Forwarding". Was kann ich sonst noch tun ?

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) 

Server-Code: `public class Server erweitert Thema {

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

Kommentare sind nicht für längere Diskussionen; Diese Konversation wurde [in den Chat verschoben] (http://chat.stackoverflow.com/rooms/138851/discussion-on-question-by-levi-omer-android-client-and-server-sockets). –

Antwort

0

Wenn Sie auf Ihrem PC von Telefon zu verbinden versuchen, dann haben Sie privat ändern static final String hostname = "localhost" für

private statische final Zeichenfolge hostname = your-pc-ip

Sie können Ihre IP mit dem Befehl ipconfig in Fenstern und ifconfig unter Linux

+0

Ich habe das versucht, und wie Sie sehen können, habe ich es geändert, und es hat nie funktioniert. –

+0

Wo ist Ihr Server implementiert, Windows? eine virtuelle Maschine? –

+0

In Android-Studio. –

0

sehen Wenn Sie nur den Host von localhost auf die IP-Adresse Ihres Computers als Ihr Java-Code, der auf Ihrem PC so gut läuft geändert werden nicht tun für Android.

Als dann müssen Sie Internet-Code in einen Thread oder AsyncTask einfügen.

Wenn Sie dies nicht tun, haben Sie eine NetworkOnMainThreadException im logcat deutlich sichtbar.

+0

Mann, es ist natürlich ein anderer Thread. Wie Sie sehen können, habe ich gesagt, dass es mit localhost funktioniert, aber nicht mit meiner IP. Wenn es einmal funktioniert hat, bedeutet es alles in Ordnung außer dem IP-Problem. Verstanden ? –

+0

Ich habe eine Ausnahme gefunden, nachdem ich 3 Minuten gewartet habe. Ich habe bearbeitet. –