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 类型以显示 ...
随机推荐
- 【GoLang】转载:我为什么放弃Go语言,哈哈
我为什么放弃Go语言 作者:庄晓立(Liigo) 日期:2014年3月 原创链接:http://blog.csdn.NET/liigo/article/details/23699459 转载请注明出处 ...
- c++面试题目解析
1.指针和引用的区别 答:A.指针可修改,引用不可改. B.指针占用内存,引用不占内存. C.引用不能为空 指针可以为空. 2.memcpy和strcpy的区别 答:strcpy 会拷贝到\0结 ...
- jsp自定义标签(时间格式化包括Long转时间)
1.jsp自带标签的格式化: jstl fmt 函数大全:主要针对格式化功能 Tags fmt:requestEncoding fmt:setLocale fmt:timeZone fmt:set ...
- iOS 在类别里添加成员变量的方法:objc_setAssociatedObject
今天在github上查看MJPopupViewController这个项目,发现里面用到了objc_setAssociatedObject,用来为类别添加成员变量. 我百度之后,发现有人是这样说明的: ...
- C++ 使用SQLite
1.SQLite是一个完全独立的.不需要服务器.不要任何配置.支持SQL的.开源的文件数据库引擎.源代码和支持可以登录:http://www.sqlite.org/ 1.1.下载sqlite3.d ...
- ACM/ICPC 之 两道dijkstra练习题(ZOJ1053(POJ1122)-ZOJ1053)
两道较为典型的单源最短路径问题,采用dijkstra解法 本来是四道练习题,后来发现后面两道用dijkstra来解的话总觉得有点冗余了,因此暂且分成三篇博客(本篇以及后两篇). ZOJ1053(POJ ...
- 23. javacript高级程序设计-数据存储
1. 数据存储 1.1 cookie HTTP Cookie, cookie,最初用来在客户端存储回话信息. (1). 限制,不同浏览器对特定域名下的cookie 的个数有限制,每个域名下最好不要操过 ...
- c#excel的操作例子
class MyData//存储行数据 { public List<string> RowData { get; set; } } static void Main(string[] ar ...
- vs版本转换工具
[转]C#写的工程项目移植转换工具 – 支持VS2005/VS2010/VS2012/VS2013 经常用Visual Studio开发项目的是不是会经常遇到下面这种情况或者类似于这样的情况?用新 ...
- Python~第三方模块
第三方库还有MySQL的驱动:MySQL-python,用于科学计算的NumPy库:numpy,用于生成文本的模板工具Jinja2 模块搜索路径 Windows下: 双\\ sys.path.ap ...