测试一台机器多个IP,相同端口的服务侦听


一台机器上,配置了多个IP,有多个应用,他们要使用相同的端口,这样能实现吗?

比如,IIS和tomcat并行运行,没有任何集成,他们分别侦听各自的IP,都是80端口,这样可行吗?

我用java做了本地的测试,机器上给一个网卡配置了2个ip
192.168.1.176
192.168.1.177

然后运行下面的程序
  1. import java.io.IOException;
  2. import java.io.OutputStream;
  3. import java.net.InetSocketAddress;
  4. import com.sun.net.httpserver.HttpExchange;
  5. import com.sun.net.httpserver.HttpHandler;
  6. import com.sun.net.httpserver.HttpServer;
  7. import com.sun.net.httpserver.spi.HttpServerProvider;
  8. /**
  9.  * 测试一台机器多个IP,相同端口的服务侦听
  10.  * 
  11.  * @author 老紫竹(Java世纪网,java2000.net)
  12.  */
  13. public class Test {
  14.   public static void main(String[] args) throws Exception {
  15.     new HTTPServerTest("192.168.1.176"60080);
  16.     new HTTPServerTest("192.168.1.177"60080);
  17.   }
  18. }
  19. class HTTPServerTest {
  20.   private String ip;
  21.   private int port;
  22.   HTTPServerTest(String ip, int port) throws IOException {
  23.     this.ip = ip;
  24.     this.port = port;
  25.     HttpServerProvider httpServerProvider = HttpServerProvider.provider();
  26.     // 绑定端口
  27.     InetSocketAddress addr = new InetSocketAddress(ip, port);
  28.     HttpServer httpServer = httpServerProvider.createHttpServer(addr, 1);
  29.     httpServer.createContext("/"new HTTPDownloaderServiceHandler());
  30.     httpServer.setExecutor(null);
  31.     httpServer.start();
  32.     System.out.println("started");
  33.   }
  34.   class HTTPDownloaderServiceHandler implements HttpHandler {
  35.     public void handle(HttpExchange httpExchange) {
  36.       try {
  37.         String response = "OK!" + ip + ":" + port;
  38.         httpExchange.sendResponseHeaders(200, response.getBytes().length);
  39.         OutputStream out = httpExchange.getResponseBody();
  40.         out.write(response.getBytes());
  41.         out.close();
  42.         httpExchange.close();
  43.       } catch (Exception ex) {
  44.         ex.printStackTrace();
  45.       }
  46.     }
  47.   }
  48. }

启动后,分别在浏览器输入
http://192.168.1.176:60080
显示
OK!192.168.1.176:60080
输入
http://192.168.1.177:60080
显示
OK!192.168.1.177:60080

结论:一台机器上的端口等于机器的ip数量*65536,也就是每个ip都有自己的一组独立端口。


但可惜,我没有在tomcat里面配置出2个同时侦听8080的服务出来,她的service.xml里面


这个只有端口,没有host的配置。希望知道如何配置的朋友给我留言。谢谢。
如果我自己找到了,也会再单独发上来的。



你可能感兴趣的:(Java)