ServerSocket 默认邦定IP
转自:http://cuisuqiang.iteye.com/blog/2037769
开发中需要开启服务端的时候,本地测试都是直接写端口,实际环境也是需要指定要邦定的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端口。
当然,这也不是双网卡的验证,因为还是在一个网卡上玩。有条件的可以到刀片机上小测一把。
ServerSocket 默认邦定IP的更多相关文章
- [WPF系列]-数据邦定之DataTemplate 根据对象属性切换模板
引言 书接上回[WPF系列-数据邦定之DataTemplate],本篇介绍如何根据属性切换模板(DataTemplate) 切换模板的两种方式: 使用DataTemplateSelecto ...
- ASP.NET中数据邦定效率问题的一点看法 - 转载(自由的天空)
在 做Asp.NET开发的时候经常用到DataList.Repeater等,用这些控件的时候经常用到数据邦定,很多程序员都是按照MS提供的方 法<%#DataBinder.Eval(Contai ...
- ionic中 .col : 默认的定宽列
.col : 默认的定宽列 在ionic的栅格中,每一行的各列默认是等宽的,这使得实现一个图片 浏览界面非常简单.下图是instagram app的截图: instagram <!DOCTYPE ...
- 漏洞利用 Exploit---利用默认口令、IP假冒、应用漏洞
漏洞利用 编辑 讨论 本词条由“科普中国”科学百科词条编写与应用工作项目 审核 . 漏洞利用(英语:Exploit,本意为“利用”)是计算机安全术语,指的是利用程序中的某些漏洞,来得到计算机的控制权( ...
- [WPF系列]-数据邦定之DataTemplate简介
引言 WPF 数据模板化模型为定义数据的表示形式提供了很大的灵活性.WPF 控件有支持自定义数据表示形式的内置功能.首先介绍下如何定义Datatemplate,然后再介绍其他数据模板化功能,例如根据自 ...
- vivado自定IP例化的问题,怎么生成VHDL的例化
在tools 下面选中project settings.然后选targat language为VHDL .这样就会生成一个以VHDL语言为模板的ip. 转载:https://zhidao.baidu. ...
- 解决dubbo注册zookeeper默认内网ip注册
前端时间做新项目的时候遇到一个dubbo的一个问题,在我们项目搭建好后使用了其他同事的支付服务,支付服务架构的方式使用了dubbo服务的方式,使用zookeeper作为注册中心,我们新项目使用dubb ...
- [WPF系列]-数据邦定之DataTemplate 对 ItemsControl 进行样式和模板处理
引言 即使 ItemsControl 不是 DataTemplate 所用于的唯一控件类型,将 ItemsControl 绑定到集合仍然很常见. 在 DataTemplate 中有哪些内容一节中, ...
- [WPF系列]-数据邦定之DataTemplate 对分层数据的支持
到目前为止,我们仅讨论如何绑定和显示单个集合. 某些时候,您要绑定的集合包含其他集合. HierarchicalDataTemplate 类专用于 HeaderedItemsControl 类型以显示 ...
随机推荐
- Bootstrap之表格checkbox复选框全选
效果图: HTML中无需添加额外的一列来表示复选框,而是由JS完成,所以正常的表格布局就行了: <table class="table table-bordered table-hov ...
- 打印log
入口文件 //日志记录配置 if (!defined('DS')) { define('DS', '/'); } if(!defined('APP_PATH_LOG')){ define('APP_P ...
- 【System】shell 实现 bat 的pause功能
read -rsp $'Press enter to continue...\n' 参考资料: http://stackoverflow.com/questions/92802/what-is-the ...
- (转) C#如何使用异步编程
怎么使用异步,就是用委托进行处理,如果委托对象在调用列表中只有一个方法,它就可以异步执行这个方法.委托类有两个方法,叫做BeginInvoke和EndInvoke,它们是用来异步执行使用. 异步有三种 ...
- Longest Increasing Path in a Matrix
Given an integer matrix, find the length of the longest increasing path. From each cell, you can eit ...
- poj 1442
一个排序的题目. 题意:给你m个数a[m],和n个数b[n]. 首先a[0]….a[b[0]]排序.输出第一个数. 然后a[0]….a[b[1]]排序.输出第二个数. 以此类推,直到输出第n个数. 思 ...
- java学习笔记--IO流
第十二章大纲: I/O input/output 输入/输出 一.创建文件,借助File类来实现 file.createNewFile() : 创建文件 file.exists() : 判断文件是否存 ...
- 13.SpringMVC和Spring集成(一) && 14.SpringMVC和Spring集成(二)
1.概念 Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,Spring致力于J2EE应用的各层的解决方案,Spring是企业应用开发的“一站式”选择,并贯 ...
- windows编程中c语言知识回顾
1.include: #include表示只在系统提供的头文件中查找: #include "Head File"表示先在当前目录中搜索,若不存在,再到系统目录中查找: vs环境中, ...
- 关于java中Double类型的运算精度问题
标题 在Java中实现浮点数的精确计算 AYellow(原作) 修改 关键字 Java 浮点数 精确计算 问题的提出:如果我们编译运行下面这个程序会看到什么?publi ...