• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    ServerSocket默认邦定IP实现过程详解
    POST TIME:2021-10-16 16:35

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

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

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

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

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

    package test;
    import java.net.InetSocketAddress;
    import java.net.ServerSocket;
    import java.net.Socket;
    public class Test {
    	public static void main(String[] args) throws Exception {
    		SocketClient client = new SocketClient();
    		new Thread(client).start();
    		
    		ServerSocket serverSocket = new ServerSocket();
    		serverSocket.bind(new InetSocketAddress(8888));
    //		serverSocket.bind(new InetSocketAddress("127.0.0.1",8888));
    //		serverSocket.bind(new InetSocketAddress("192.168.1.100",8888));
    		System.out.println(serverSocket.toString());
    		serverSocket.accept();
    	}
    }
    class SocketClient implements Runnable{
    	public void run() {
    		try {
    			Thread.sleep(2000);
    			try {
    				Socket socket = new Socket("127.0.0.1", 8888);
    				System.out.println("127.0.0.1 成功" + socket.toString());
    			} catch (Exception e) {
    				System.err.println("127.0.0.1 失败");
    			}
    			try {
    				Socket socket = new Socket("192.168.1.100", 8888);
    				System.out.println("192.168.1.100 成功" + socket.toString());
    			} catch (Exception e) {
    				System.err.println("192.168.1.100 失败");
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }

    此时的打印结果是:

    ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=8888]
    127.0.0.1 成功Socket[addr=/127.0.0.1,port=8888,localport=59213]
    192.168.1.100 成功Socket[addr=/192.168.1.100,port=8888,localport=59214]

    使用127.0.0.1时打印结果:

    ServerSocket[addr=/127.0.0.1,port=0,localport=8888]
    127.0.0.1 成功Socket[addr=/127.0.0.1,port=8888,localport=59416]
    192.168.1.100 失败

    使用192.168.1.100时打印结果:

    ServerSocket[addr=/192.168.1.100,port=0,localport=8888]
    127.0.0.1 失败
    192.168.1.100 成功Socket[addr=/192.168.1.100,port=8888,localport=59429]

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

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

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    上一篇:Docker遇到Intellij IDEA,Java开发提升了十倍生产力
    下一篇:springcloud alibaba nacos linux配置的详细教程
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信