最近在开发小程序,因为需要在手机上面进行预览,所以需要将Java运行在局域网内,手机上面的小程序才能成功访问服务。但是自己在配置时遇到了一些问题,导致在windows上面的服务无法在局域网内不访问到,所以记录一下如何解决这个问题。
1.保证在同一个局域网内
windows 上面 使用 ipconfig 查看网络
这里我的电脑连接的手机的热点。
2.服务绑定 IP 与 端口
1.绑定正确的地址
这里注意,绑定的 ip 地址不能是本地回环地址,比如 127.0.0.1,localhost 这种,这样的地址无法被外部访问。可以绑定电脑在局域网内的地址或者 0.0.0.0(监听本机所有的 ip 地址),这样就能通过局域网内的 ip 连接到服务器。端口也要正确绑定,保证端口没有被占用。如:
这里我是使用 netty 来实现的 HTTP 服务
//绑定ip和端口
ChannelFuture sync = server.bind("0.0.0.0", 9000).sync();
System.out.println("server run in :"+host +":"+ port);
ChannelFuture sync1 = sync.channel().closeFuture().sync();
可以使用命令来查看端口是否被占用:
netstat -ano | findstr :9000
如果什么都没有返回就表示没有被占用
服务启动后也可以查看端口的占用情况,检查端口是否绑定在自己的服务上
先查看端口的占用情况,根据返回的占用进程查看进程信息
tasklist /fi "PID eq 1234"
2.防火墙开放端口
要确保所绑定的端口,在 windows 内对外开放了
1.打开控制面板进入系统和安全里面的防火墙,点击高级设置,在这里进行端口的开放
2.点击入站规则,新建规则
3.点击端口,选择 tcp 选择特定端口,然后填写自己需要开放的端口,然后选择允许连接,然后一直下一步
4.启用规则
当我们通过上面的配置后应该就能看到我们所添加的配置,然后我们需要点击这个配置,点击启用规则,这样才会生效,端口才能对外开放。
入站规则是指控制从外部网络进入计算机的流量的规则。它管理着外部请求如何访问计算机上的服务和资源,比如 Web 服务、远程桌面等。
出站规则是指控制从计算机到外部网络发出的流量的规则。它管理计算机上程序或服务向外部发送的请求,如浏览器访问网站、软件向外发送数据等。
这里我们作为服务器,并不需要像外界发送请求,所以只需要配置入站规则就行了。
3.允许应用访问网络
经过上面的操作,理论上来讲,端口和ip地址都已经配置好了,局域网内的其他的主机,应该就能正常访问电脑服务了,但是我在实际实验时发现还是不能进行访问,但是将防火墙直接关闭后却能够进行访问,自己还一度认为,是端口的问题,然后经过搜索发现应用也需要进行允许网络访问请求。
这是因为防火墙有几个层,不止有对网络层面流量的过滤,还有应用层的过滤,因为 java 文件是 Java 来运行 ,所以还需要允许Java的网络连接。
在入站规则中选择自己服务运行的 java 然后双击,点击允许连接,点击确定即可。
这样我们的服务就能被局域网内的其他主机访问到了。如下面就是在手机访问到的内容。