服务器修改ip socket,ServerSocket默认邦定IP实现过程详解

开发中需要开启服务端的时候,本地测试都是直接写端口,实际环境也是需要指定要邦定的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端口。

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

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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值