自己写的一个HTTP文件服务器,在端口 50000上监听HTTP连接请求,在Eclipse里面将程序正常地启动之后,能够在自己的机器上(Eclipse启动该程序的机器上)访问 50000端口,即FileServer能够正常提供服务,可是在同一局域网下的其他机子则访问不了。(FileServer运行的机器称为本机,同一局域网内的机器称为 其他机子)

本机状态如下:

系统:Windows 7

防火墙状态:已关闭

同一局域网的其他机子能够 ping 通 本机。但是使用 telnet ip 50000 提示连接拒绝。

后面看到这篇文章:开放windows服务器端口-----以打开端口8080为例

按照操作把50000端口,添加防火墙例外设置之后,未果。因为我的防火墙本来就是关闭的啊,应该不是添加例外端口的原因吧。。。。。

于是,又把防火墙开启,结果其他机子都ping不通本机了,更别说访问 50000端口的服务了。

后来,把程序Eclipse导出jar包放到Linux上运行,也是同样的结果---其他机子能ping通,但就是访问不了FileServer的50000端口。

但该端口是正常运行的:

系统为CentOS,防火墙也已关闭。

使用telent ip 50000端口,提示:Connection Refused

原来问题的原因是:直接看代码,

ChannelFuture f = b.bind("localhost", port).sync();
System.out.println("HTTP 文件服务器启动, 地址是: " + "localhost:" + port + url);

代码中使用了 localhost

把 localhost修改成本机的IP地址,问题解决。

ChannelFuture f = b.bind("10.0.12.160", port).sync();
System.out.println("HTTP 文件服务器启动, 地址是: " + "http://10.0.12.160:" + port + url);

重新编译,运行程序。不管在Windows下,还是在Linux下,都能访问50000端口了。

其中,CentOS状态是:防火墙关闭了的。

其中,Windows状态是:防火墙关闭了的。

原因总结:

这其实不是防火墙的问题,因为防火墙已经关闭了。而是一个简单的网络地址问题:

localhost 本质上是个域名,理论上可以指向任何IP地址,只不过一般都是指的是环回地址:127.0.0.1,对于环回地址而言,其他计算机是不能访问的!!!

假设程序中使用 localhost 作为bind()方法的绑定的参数,可以看到其端口启动信息如下:

也就是说,这个50000端口绑定在了环回地址上!!!

这也是为什么 telnet 192.168.121.35 50000 提示Connection Refused的原因,因为50000端口在 127.0.0.1上。

把程序中使用IP地址(192.168.121.35)作为bind方法的绑定参数,启动程序后,看到端口信息如下:

端口50000绑定的不再是环回地址了,而是一个IP地址。

那为什么能够ping通 192.168.121.35 呢?当然能了,在同一个局域网里面,防火墙也是关闭的,网络是正常的。

现在终于知道原来就算能ping通,ping命令说明到192.168.121.35地址没有问题。但是我们的程序的端口是在 127.0.0.1这个地址上,这也是为什么尽管防火墙关闭了,其他机子还是访问不了50000端口的原因。----环回地址只能在本机上使用。

写程序时要细心,测试的时候用localhost,上线了就不要用了。

------------------------------------分割线-------------------------------

明白了 localhsot对应的就是 127.0.0.1之后,其实在代码里面的 bind()方法也可以使用 "localhsot" 作为参数,并让其他机子能够访问文件服务器(端口50000),只需要把 localhost 对应的地址127.0.0.1改成主机的IP地址就可以了。

比如, /etc/hosts文件的默认内容如下:

可以看到, localhost对应的就是 127.0.0.1

如果把它改成 192.168.121.35

那么,在程序中使用 "localhost"参数,其他机子也能访问文件服务器的50000端口了。

也就是说:

127.0.0.1 是绑定在 loopback 接口上的地址,如果服务端套接字绑定在它上面,你的客户端程序就只能在本机访问。多简单的原理!!细心就可以了!

参考:localhost、127.0.0.1 和 本机IP 三者的区别?

Windows 与 Linux下关于端口不能访问的问题的更多相关文章

  1. Linux 下指定端口开放访问权限

    Linux 下指定端口开放访问权限 作者:Grey 原文地址: 博客园:Linux 下指定端口开放访问权限 CSDN:Linux 下指定端口开放访问权限 环境 CentOS 系和 Debian 系的防 ...

  2. Windows和linux下的端口转发

    利用VPN,实现无公网IP或内网服务器的服务 @@@code netsh interface portproxy add v4tov4 listenport=8887 connectaddress=1 ...

  3. windows和linux下杀死Tomcat进程,解决端口占用

    windows和linux下解决Tomcat进程 windows下启动Tomcat报错,8080端口号被占用,报错信息如下 两种解决方法,一种是关闭了这个端口号,另外一种是修改Tomcat下的serv ...

  4. windows和linux下关闭Tomcat进程

    windows和linux下解决Tomcat进程 windows下启动Tomcat报错,8080端口号被占用,报错信息如下 两种解决方法,一种是关闭了这个端口号,另外一种是修改Tomcat下的serv ...

  5. HDP2.0.6+hadoop2.2.0+eclipse(windows和linux下)调试环境搭建

    花了好几天,搭建好windows和linux下连接HDP集群的调试环境,在此记录一下 hadoop2.2.0的版本比hadoop0.x和hadoop1.x结构变化很大,没有eclipse-hadoop ...

  6. docker在windows下和linux下网络底层的一些区别

    windows和linux下的docker运行时的网络结构是有区别的 a.windows下,默认使用Hyper-v创建一个linux虚拟机,承载docker.所以从外向内的路径为: windows - ...

  7. Windows 和  Linux 下 禁止ping的方法

    Windows 和Linux 下 禁止ping的方法 目的: 禁止网络上的其他主机或服务器ping自己的服务器 运行环境: Windows 03.08  linux 方法: Windows 03下: ...

  8. Windows与Linux下文件操作监控的实现

    一.需求分析: 随着渲染业务的不断进行,数据传输渐渐成为影响业务时间最大的因素.究其原因就是因为数据传输耗费较长的时间.于是,依托于渲染业务的网盘开发逐渐成为迫切需要解决的需求.该网盘的实现和当前市场 ...

  9. 怎样在Windows和Linux下写相同的代码

    目前,Linux在国内受到了越来越多的业内人士和用户的青睐.相信在不久的将来,在国内为Linux开发 的应用软件将会有很大的增加(这不,金山正在招兵买马移植WPS呢).由于未来将会是Windows和L ...

随机推荐

  1. php 文件上传 $_FILES 错误码

    假设文件上传字段的名称file_name,则: $_FILES['file_name']['error']有以下几种类型 1.UPLOAD_ERR_OK 其值为 0,没有错误发生,文件上传成功. 2. ...

  2. CentOS下使用VirtualBox 安装 Windows虚拟机的简单方法

    1.物理服务器安装CentOS7.5 2. 安装VNC 3. 关闭防火墙,关闭selinux,上传virtualbox的rpm包. http://download.virtualbox.org/vir ...

  3. ORA-01654 : 表空间不足

    参考: Oracle表空间不足ORA-01654 查看表空间和表的使用率 ORA-01654 索引 无法通过 表空间扩展 Oracle 查看表空间的大小及使用情况sql语句 一.基础查询 1.查看表空 ...

  4. K3CLOUD新增用户

    1.在金蝶云之家对应的产品序列中新增用户 2.在CLOUD本地查询用户-同步注册用户后,云平台用户会同步至本地

  5. mxnet,theano与torch的简单比较

    这篇文章我想来比较一下Theano和mxnet,Torch(Torch基本没用过,所以只能说一些直观的感觉).我主要从以下几个方面来计较它们: 1.学习框架的成本,接口设计等易用性方面. 三个框架的学 ...

  6. Linux基础学习(9)--文件系统管理

    第九章——文件系统管理 一.回顾分区和文件系统 1.分区类型: 2.分区表示方法: 3.文件系统: 二.文件系统常用命令 1.df命令.du命令.fsck命令和dump2fs命令: (1)文件系统查看 ...

  7. js 实现List

    js 实现List 列表是一组有序的数据.每个列表中的数据项称为元素.在 JavaScript 中,列表中的元素可以是任意数据类型. 我们可以根据数组的特性来实现List. List 抽象数据类型定义 ...

  8. BZOJ2595 WC2008游览计划(斯坦纳树)

    斯坦纳树板子题. 考虑状压dp,设f[i][j][S]表示当前在点(i,j)考虑转移,其所在的联通块包含的关键点集(至少)为S的答案. 转移时首先枚举子集,有f[i][j][S]=min{f[i][j ...

  9. [算法进阶0x10]基本数据结构A作业总结

    在线题目\(oj\)评测地址:https://xoj.red/contests/show/1237 T1-Editor(hdu4699) 题目描述 维护一个整数序列的编辑器,有以下5种操作,操作总数不 ...

  10. 在kubernetes集群上用helm安装Datadog(Monitoring)

    Datadog is a monitoring service that gathers monitoring data from your containers within your Azure ...