2016-05-28 5 views
0

Ich versuche, einen Chat-Server und Client, die über zwei separate Computer mit dem Internet verbunden kommunizieren können. Einer von ihnen ist mit WLAN verbunden und ein anderer ist über ein Modem. Hier ist mein Servercode.Kommunikation über zwei separate Computer mit Java-Sockets

GreetingServer.java

import java.net.*; 
import java.io.*; 

public class GreetingServer extends Thread 
{ 
    private ServerSocket serverSocket; 

    public GreetingServer(int port) throws IOException 
    { 
     serverSocket = new ServerSocket(port); 
     serverSocket.setSoTimeout(100000); 
    } 

    public void run() 
    { 
     while(true) 
     { 
     try 
     { 
      System.out.println("Waiting for client on port " + 
      serverSocket.getLocalPort() + "..."); 
      Socket server = serverSocket.accept(); 
      System.out.println("Just connected to " 
        + server.getRemoteSocketAddress()); 
      DataInputStream in = 
        new DataInputStream(server.getInputStream()); 
      System.out.println(in.readUTF()); 
      DataOutputStream out = 
       new DataOutputStream(server.getOutputStream()); 
      out.writeUTF("Thank you for connecting to " 
       + server.getLocalSocketAddress() + "\nGoodbye!"); 
      server.close(); 
     }catch(SocketTimeoutException s) 
     { 
      System.out.println("Socket timed out!"); 
      break; 
     }catch(IOException e) 
     { 
      e.printStackTrace(); 
      break; 
     } 
     } 
    } 
    public static void main(String [] args) 
    { 
     int port = Integer.parseInt("6066"); 
     try 
     { 
     Thread t = new GreetingServer(port); 
     t.start(); 
     }catch(IOException e) 
     { 
     e.printStackTrace(); 
     } 
    } 
} 

GreetingClient.java

import java.net.*; 
import java.io.*; 

public class GreetingClient2 
{ 
    public static void main(String [] args) 
    { 
     String serverName = "10.2.3.100"; 
     int port = Integer.parseInt("6066"); 
     try 
     { 
     System.out.println("Connecting to " + serverName + 
     " on port " + port); 
     Socket client = new Socket(serverName, port); 
     System.out.println("Just connected to " 
     + client.getRemoteSocketAddress()); 
     OutputStream outToServer = client.getOutputStream(); 
     DataOutputStream out = new DataOutputStream(outToServer); 
     out.writeUTF("Hello from " 
         + client.getLocalSocketAddress()); 
     InputStream inFromServer = client.getInputStream(); 
     DataInputStream in = 
         new DataInputStream(inFromServer); 
     System.out.println("Server says " + in.readUTF()); 
     client.close(); 
     }catch(IOException e) 
     { 
     e.printStackTrace(); 
     } 
    } 
} 

Die IP-Adresse im Code-Client ist der Computer, auf dem der Server von InetAddress.getLocalHost erworben läuft(). GetHostAddress() . Wenn ich den Server starte, wartet er auf den Client. Und wenn ich den Client-Code von einem anderen Computer aus ausführen, wird keine Verbindung hergestellt. Ist es möglich, so über Sockets in Java zu kommunizieren?

+0

Wenn beide im selben Netzwerk sind, oder wenn ein Netzwerk zu einem anderen geroutet wird, denke ich so – Leo

+0

'String serverName =" 10.2.3.100 "; Könnten Sie bitte einen' ifconfig'-Eingang angeben? – MedAl

+0

Ich denke, der Server-Computer hat eine deaktivierte Firewall auf dem Port 6066? – sanastasiadis

Antwort

0

Ja, es ist möglich. Ihr Server muss eine haben.

Auch wenn Ihr Server über WLAN verbunden ist, überprüfen Sie die Router-Firewall-Einstellungen.

+0

Ich glaube nicht. Ich habe bereits in einem lokalen Netzwerk gearbeitet, also waren alle IP im selben Adressbereich. – MedAl

+0

Es funktioniert gut, wenn von separaten Computern ausgeführt wird. Aber es wirft ein Exception Sprichwort "Verbindung abgelehnt: Verbindung", wenn ich sowohl Server als auch Client auf dem gleichen Computer unter Verwendung externer IP laufen lassen. Aber es ist in Ordnung, wenn ich localhost benutze. Warum passiert dies ? –

Verwandte Themen