2016-08-04 7 views
1

Lösung

Ich habe viele Dinge ausprobiert, die ich online gefunden habe. Ich habe versucht, auf 0.0.0.0 durch den Code zu binden:So akzeptieren Sie Remote-Verbindungen zu einem Java-WebServer

InetAddress addr = InetAddress.getByName("0.0.0.0"); 
ServerSocket socket = new ServerSocket(5000, 50, addr); 

Welche nicht Arbeit tat. Dann habe ich den folgenden Code ausprobiert, der DID am Ende funktioniert.

Wenn jemand erklären kann, warum das funktioniert, aber der andere nicht, würde es sehr geschätzt werden.

Hauptpost

Ich bin derzeit versucht, Verbindungen zu einem Serversocket von meinem Fern Amazon Web Services EC2 Server (Ubuntu 14.04, Java 1.8.0_101) zu akzeptieren. für recieving POST-Anfragen mit Daten

Hier ist der Code, den ich mit Arbeit am

public void CallbackListen() { 

    new Thread(new Runnable() { 
     public void run(){ 

      try{ 

      ServerSocket server = new ServerSocket(5000); 
       Socket conn = server.accept(); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

       OutputStream out = conn.getOutputStream(); 
       int count = 0; 

       while (true) 
       { 
       count++; 
       String line = reader.readLine(); 
       if (line == null) 
       { 
        System.out.println("Connection closed"); 
        break; 
       } 
       System.out.println("" + count + ": " + line); 
       if (line.equals("")) 
       { 
        System.out.println("Writing response..."); 

        // need to construct response bytes first 
        byte [] response = "<html><body>Hello World</body></html>".getBytes("ASCII"); 

        String statusLine = "HTTP/1.1 200 OK\r\n"; 
        out.write(statusLine.getBytes("ASCII")); 

        String contentLength = "Content-Length: " + response.length + "\r\n"; 
        out.write(contentLength.getBytes("ASCII")); 

        // signal end of headers 
        out.write("\r\n".getBytes("ASCII")); 

        // write actual response and flush 
        out.write(response); 
        out.flush();; 
       } 
       } 
      } 
      catch(Exception e){ 


      } 

     } 
    }).start(); 

Der Zweck ist es als Callback-URL zu verwenden. Momentan läuft es auf localhost: 5000, aber ich kann nicht remote darauf zugreifen. Mein Server akzeptiert eingehende TCP-Anforderungen auf Port 5000. Wenn ich einen netstat -l-Befehl ausführe, anstatt eine lokale Adresse von *: 5000 zu haben, ist es [::]: 5000, und statt einer fremden Adresse von *: * es ist [::]:*.

Wie ändere ich meinen Code, um ausländische Anfragen zu akzeptieren?

Danke,

-Justin

+1

Welche Regeln haben Sie in Ihren Sicherheitsgruppen? Haben Sie den Port 5000 in Sicherheitsgruppen geöffnet? – randominstanceOfLivingThing

+0

@randominstanceOfLivingThing, "Mein Server akzeptiert eingehende TCP-Anforderungen auf Port 5000." – Schwaitz

+0

@Schwaitz was dein Server akzeptiert, wie über 'netstat' sichtbar, und was die AWS Firewall, bekannt als ** Security Group **, akzeptiert, sind zwei völlig verschiedene Dinge. Haben Sie, um es noch einmal zu wiederholen, den Port 5000 in der Sicherheitsgruppe geöffnet, die der EC2-Instanz zugewiesen ist? –

Antwort

0

ich viele Dinge ausprobiert, die ich online gefunden. Ich habe versucht, auf 0.0.0.0 durch den Code zu binden:

InetAddress addr = InetAddress.getByName("0.0.0.0"); 
ServerSocket socket = new ServerSocket(5000, 50, addr); 

Welche nicht Arbeit tat. Dann habe ich den folgenden Code ausprobiert, der DID am Ende funktioniert.

InetAddress addr = InetAddress.getByAddress(new byte[] {0x00,0x00,0x00,0x00}); 
ServerSocket socket = new ServerSocket(5000, 50, addr); 
Verwandte Themen