supersocket分布式架构(ServerSocket默认邦定IP实现过程详解)
supersocket分布式架构
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端口。
当然,这也不是双网卡的验证,因为还是在一个网卡上玩。有条件的可以到刀片机上小测一把。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。
- sqlserver连接字符串函数(SQL SERVER 2012新增函数之字符串函数FORMAT详解)
- sql server事件跟踪器中常用的跟踪事件
- wampserver配置教程图文(WampServer安装配置及使用图文教程)
- 修改sqlserver数据库名称步骤(SQL server数据库创建代码 filegroup文件组修改的示例代码)
- sql server建表语句带字段说明(SqlServer给表增加多个字段的语法)
- sqlserver电脑休眠时断开连接(浅谈sqlserver下float的不确定性)
- sqlserver安装日志文件夹(SQL SERVER日志进行收缩的图文教程)
- 将SQL Server数据迁移到MySQL的方法
- sqlserver降序排列(SQL SERVER临时表排序问题的解决方法)
- sqlserver如何添加数据库(sqlserver建立新用户及关联数据库教程)
- sqlserver怎么显示变量所占字节数(SQL Server中关于基数估计计算预估行数的一些方法探讨)
- sql server还原数据库时提示数据库正在使用
- sqlserver使用说明(SQL Server视图的讲解)
- mysql 命令与sqlserver的区别大么(MySQL系列之执行SQL 语句时发生了什么?)
- sql触发器编写教程(SQL Server 使用触发器trigger发送电子邮件步骤详解)
- sqlserver语句创建窗口布局(SQL Server 2012 开窗函数)
- 赢麻了 富士公布2021年度财报 营利同比增长240(富士公布2021年度财报)
- 医事文化谈屑 | 古人的名 字 号(医事文化谈屑古人的名)
- ()
- 网友很惭愧,自己写了很多年的字,到头来还不如一名小学生写的好(自己写了很多年的字)
- 中华第一楷 张瑞龄 86岁高龄,苦练楷书71年,一幅字卖593万(中华第一楷张瑞龄)
- 冯骥才 年意(冯骥才年意)
热门推荐
- python字符处理的函数(Python字符串内置函数功能与用法总结)
- css3画出苹果手机(基于CSS3画一个iPhone)
- mysql常用优化方法(理解MySQL查询优化处理过程)
- tomcat启动闪退拒绝访问(详解Tomcat双击startup.bat闪退的解决方法)
- 循环查询sql server(SQL Server 树形表非循环递归查询的实例详解)
- 如何用python人脸识别(Python学习笔记之视频人脸检测识别实例教程)
- sql语句按字段排序(SQL语句实现表中字段的组合累加排序)
- nginx配置文件位置(查看nginx配置文件路径和资源文件路径的方法)
- PHP如何安装(PHP使用 Pear 进行安装和卸载包的方法详解)
- dockerfile镜像案例(Dockerfile构建自定义镜像的实现)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9