2016-06-26 68 views
0

我正在測試出灣2.0.0.Alpha1網絡服務器。當我在本地運行它時,它會運行並返回Hello World當我去localhost:80時。然後,我在遠程服務器上部署Web服務器並轉至remote_ip:80,但我沒有收到任何迴應。如果我在遠程服務器上運行curl -i -X GET http://localhost:80,那麼我也會收到Hello World。所以服務器肯定正在運行,但由於某些原因,它只是無法通過遠程IP地址訪問。如果我嘗試將主機名設置爲代碼中的遠程IP(即.addHttpListener(80, "remote.ip")),那麼我會得到一個BindException承諾網絡服務器不綁定到遠程地址

import io.undertow.Undertow; 
import io.undertow.server.HttpHandler; 
import io.undertow.server.HttpServerExchange; 
import java.io.IOException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public class HelloWorldServer { 

    public static void main(final String[] args) { 
     try { 
      Runtime.getRuntime().exec("sudo fuser -k 80/tcp"); 
     } catch (IOException ex) { 
      Logger.getLogger(HelloWorldServer.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     Undertow server = Undertow.builder() 
       .addHttpListener(80, null) 
       .setHandler(new HttpHandler() { 
        @Override 
        public void handleRequest(final HttpServerExchange exchange) throws Exception { 
         exchange.getResponseSender().send("Hello World"); 
        } 
       }).build(); 
     server.start(); 
    } 

} 

任何線索?

+0

線索#1:使用「netstat -a」(或等價物)來檢查服務器正在監聽的IP和端口。 –

+0

'tcp6 0 0 127.0.0.1:80 ::: * LISTEN 2939/java ' – Hooli

+0

那麼你是否在使用該IP地址的IPv6上使用curl? (這是「本地主機」...) –

回答

0

addHttpListener(80, null)的第二個參數是主機。您需要在其中放置一個主機名或IP,讓其監聽公共IP。使用null它只會綁定到本地主機。

嘗試綁定到公共IP或綁定到0.0.0.0如果要綁定到所有地址。

Undertow server = Undertow.builder() 
     .addHttpListener(80, "0.0.0.0") 
     .setHandler(new HttpHandler() { 
      @Override 
      public void handleRequest(final HttpServerExchange exchange) throws Exception { 
       exchange.getResponseSender().send("Hello World"); 
      } 
     }).build(); 
server.start(); 
相關問題