zoukankan      html  css  js  c++  java
  • ServerSocket 默认邦定IP

    转自:http://cuisuqiang.iteye.com/blog/2037769

    开发中需要开启服务端的时候,本地测试都是直接写端口,实际环境也是需要指定要邦定的IP才可以。

    因为对于服务器来说,有时它不止一块网卡,而我们系统一定是通过指定的IP和端口进行通信的,所以服务端所使用的IP和端口都需要定义配置文件。

    那么在平常测试时,在没有指定IP的情况下,ServerSocket到底邦定到哪里了?

    在这种情况下,服务器会把此端口绑定到0.0.0.0上面,即在所有IP上面都绑定,即能在每个ip上面收到请求。至于0.0.0.0是什么,这里就不说了。

    下面是一个测试程序,通过如下程序即可看到到底是怎么样的情况:

    Java代码  收藏代码
    1. package test;  
    2. import java.net.InetSocketAddress;  
    3. import java.net.ServerSocket;  
    4. import java.net.Socket;  
    5. public class Test {  
    6.     public static void main(String[] args) throws Exception {  
    7.         SocketClient client = new SocketClient();  
    8.         new Thread(client).start();  
    9.           
    10.         ServerSocket serverSocket = new ServerSocket();  
    11.         serverSocket.bind(new InetSocketAddress(8888));  
    12. //      serverSocket.bind(new InetSocketAddress("127.0.0.1",8888));  
    13. //      serverSocket.bind(new InetSocketAddress("192.168.1.100",8888));  
    14.         System.out.println(serverSocket.toString());  
    15.         serverSocket.accept();  
    16.     }  
    17. }  
    18. class SocketClient implements Runnable{  
    19.     public void run() {  
    20.         try {  
    21.             Thread.sleep(2000);  
    22.             try {  
    23.                 Socket socket = new Socket("127.0.0.1", 8888);  
    24.                 System.out.println("127.0.0.1 成功" + socket.toString());  
    25.             } catch (Exception e) {  
    26.                 System.err.println("127.0.0.1 失败");  
    27.             }  
    28.             try {  
    29.                 Socket socket = new Socket("192.168.1.100", 8888);  
    30.                 System.out.println("192.168.1.100 成功" + socket.toString());  
    31.             } catch (Exception e) {  
    32.                 System.err.println("192.168.1.100 失败");  
    33.             }  
    34.         } catch (Exception e) {  
    35.             e.printStackTrace();  
    36.         }  
    37.     }  
    38. }  

    此时的打印结果是:

    Java代码  收藏代码
    1. ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=8888]  
    2. 127.0.0.1 成功Socket[addr=/127.0.0.1,port=8888,localport=59213]  
    3. 192.168.1.100 成功Socket[addr=/192.168.1.100,port=8888,localport=59214]  

    使用127.0.0.1时打印结果:

    Java代码  收藏代码
    1. ServerSocket[addr=/127.0.0.1,port=0,localport=8888]  
    2. 127.0.0.1 成功Socket[addr=/127.0.0.1,port=8888,localport=59416]  
    3. 192.168.1.100 失败  

     使用192.168.1.100时打印结果:

    Java代码  收藏代码
    1. ServerSocket[addr=/192.168.1.100,port=0,localport=8888]  
    2. 127.0.0.1 失败  
    3. 192.168.1.100 成功Socket[addr=/192.168.1.100,port=8888,localport=59429]  

    可以看到默认邦定到的是0.0.0.0,此时使用任何能标记到本台电脑的IP都可以访问到8888端口。

    当然,这也不是双网卡的验证,因为还是在一个网卡上玩。有条件的可以到刀片机上小测一把。  

  • 相关阅读:
    [Cocoa]XCode下的iOS单元测试
    [Cocoa]深入浅出Cocoa之Framework
    [MAC技巧]在Dock上添加最近使用的应用程序
    [软件工程]Scrum 学习笔记
    [Cocoa, 医疗]Dicom Image Viewer for iPad
    [Cocoa]iOS 开发者账户,联机调试,发布应用事宜
    [医疗开发]医疗相关名词解析
    [Cocoa]XCode中定制Prefix.pch文件
    [Cocoa]苹果Cocoa编码规范
    饮食贴士远离便秘瘦小腹 生活至上,美容至尚!
  • 原文地址:https://www.cnblogs.com/x_wukong/p/5159737.html
Copyright © 2011-2022 走看看