[经验] 【记录-成长】架设一个简单的网络服务器

ywlzh   2016-9-29 11:31 楼主
目标: 将自己写的tcpserver或者httpserver能让外网访问。 方法: 路由设置 花生壳内网穿透 具体实施: 第一种方式: 路由设置 1.进入路由器的服务器里,一般是是192.168.1.1(网关,可随意更改) 将自己设备连接上路由的IP地址给静态分配与MAC绑定,(不做这一步也可以,只是每次开网就需要检查一下)。 QQ截图20160929132659.png 2.检查路由的IP是否与自己在网上搜索IP得到的结果是一样的。 QQ截图20160929133027.png QQ截图20160929133106.png 这两个得到的结果必须一致,这就是公网的IP,这个IP地址就是其他网络设备需要访问的,不管是tcpsocket,还是http请求,都是这个IP。 3.路由转发设置,有些路由器里这条设置在虚拟服务器里,添加一个条目,有的路由器里高级设置里有转发规则。添加一条,让外部访问(自己给别人)的端口通过路由转发到自己嵌入式设备的IP和端口上来: 比如,我给外网上(告诉别人) IP: 121.4.147.109 端口:8080 ,转发就是将这个IP和端口转发到我自己设备的IP和端口 ,IP:192.168.31.150(自己静态设置的),端口:8086 QQ截图20160929133954.png 那么别人只需要socket连接121.4.147.109:8080 而我的设备只需要监听192.168.31.150:8086,这样,别人发来的信息就会被路由转发给我 4.DMZ主机,这一步与第三步是不同,如果第三步成功,就可以直接测试自己的服务器,如果不成功,就试一下这一步,DMZ是将这个路由分配的IP的所有端口全部暴露出去。而且一个路由只能暴露一个IP。 注意:一定要选择一个可以的运营商,保证他能给你路由分配的是公网IP,如果不是就有可能是二级IP,这个可以在第二步就可以看出来,不一致就代表运营商分配下来的的就是二级IP,如果这样,就算在路由设置了转发,外网访问也会被公网IP网关给拦下来,是不会让路由知道的。 更多详细的参考: http://www.cnblogs.com/zhuxuekui/p/4684513.html 第二种方式:花生壳内网穿透 这种方式就不需要在在路由设置了,也不管你是几级的IP了,好像说这个是通过DNS映射上去的。 1.下载花生壳客户端,注册一个免费的域名,下一步不是免费的,要几块钱。 QQ截图20160929135253.png QQ截图20160929145709.png 点击域名列表,进入网页界面 QQ截图20160929140059.png 2.好像下方有个开通什么服务,选择60秒/次的心跳包,还要身份验证再化几块钱开通一个月,最后点击内网穿透 QQ截图20160929140227.png 点击编辑设置好自己设备需要监听的IP地址与端口 比如前面的192.168.31.150:8086 3.设置好后,就可以关掉网页了,回到客户端这,点击 自诊断 QQ截图20160929140526.png 一切成功,别人就需要访问这个注册来的域名,信息给了花生壳那边的服务器,花生壳服务器在透过客户端转给你自己的设备,走了几道弯,少了点限制,这个需要客户端跟着运行。 测试: 如果是用MCU设备连入网络的话,用路由器设置的方法吧,花生壳就不适用,MCU,我用的是STM32F407,用的网线连的路由,板子程序参照别人写的TCPserver移植过来的(例子网上论坛到处都是),客服端用的手机下载一个TCP连接APP(2M的大小)。 如果用电脑测试,可以自己写一个tcpserver或者httpserver,我用的QT写的,测试无误,在网上找tcperver的例子,很多,我这就不贡献。这里发个httpserver的,源码是在别人的. 源码在这: https://github.com/firstvan/HttpServer 做了一些改动,源码上是打开就默认监听IP与端口,我添加了GUI控件。 QQ截图20160929142245.png IP就是自己电脑得到的IP地址,端口是路由器设置转发来的端口或者花生壳设置的端口。打开服务器,在网页上输入公网IP加端口或者花生壳域名,至此就完成了。 QQ截图20160929143144.png 最后的比较: 这两种方式的使用,路由器设置的方法,虽然有几点限制,但是可以支持TCP/IP协议,说到这,可能就有猜测了,的确,花生壳内网穿透的方式,我也不知道怎么回事,我发的TCP协议的包,我TCPserver没有任何反应,但是client端表示连接成功了,这个client端连接的是花生壳那边的服务器,只有这样才能转过来,可惜,http请求是转了,TCP的没有转。 我这里放弃了用花生壳内网穿透的方式传TCP协议数据,如果非要执意用tcp,我这就提供一下思路,怎么获取花生壳域名的IP地址 第一种: 直接点击 客户端的自诊断 QQ截图20160929144055.png 箭头所指便是socket要连的IP地址,端口是默认的80端口。 第二种:不想用第一种方法的,说搞开发了,总不能自己写个程序还的点别人的程序,看了结果才知道吧,要是那边改变了怎么办?哈,有办法,那就是用DNS解析域名,获取IP地址。 露一下程序(QT) QQ截图20160929145036.png 这便会将结果打印出来,至于怎么添加进自己的程序里去,就看造化了 如果只有一台联网的电脑,也是可以测试的,分享一下可以测试用的文件,已用QT打好包了,解压便可执行window7 测试可用、
webserver_qt.rar (12.78 MB)
(下载次数: 13, 2016-9-29 14:53 上传)
源码,上面就提到,只是添加了几个控件而已,做过QT的,看看也就会了。 本帖最后由 ywlzh 于 2016-9-29 15:04 编辑
天地庄周马;江湖范蠡船。 个性签名还是放QQ号吧,2060347305,添加说明EEworld好友

回复评论 (6)

1 来自 6楼 ywlzh 

花生壳内网穿透补充: 换一个花生壳的客户端(真是的),在自定义应用里面,把支持80端口给去掉,这样,就会随机出来一个端口号,这就支持TCP/IP数据收发了 客户端:
NewPhDDNS_2.8.0.9515.part1.rar (15 MB)
(下载次数: 3, 2016-9-30 11:04 上传)
NewPhDDNS_2.8.0.9515.part2.rar (3.13 MB)
(下载次数: 3, 2016-9-30 11:05 上传)
本帖最后由 ywlzh 于 2016-9-30 11:05 编辑
天地庄周马;江湖范蠡船。 个性签名还是放QQ号吧,2060347305,添加说明EEworld好友
点赞  2016-9-30 10:45
楼主吃饭去了,插个队,嘎嘎
点赞  2016-9-29 11:37
强势插入。。。
点赞  2016-9-29 12:04
可以的可以的,内网穿透,
亚里士缺德
点赞  2016-9-29 12:26
引用: Bingqi23 发表于 2016-9-29 11:37
楼主吃饭去了,插个队,嘎嘎

吃饭回来了 哈哈哈
天地庄周马;江湖范蠡船。 个性签名还是放QQ号吧,2060347305,添加说明EEworld好友
点赞  2016-9-29 16:03
不错啊
极致物业管理软件,将软件做到极致 www.jeez.com.cn 联系电话:4008880135
点赞  2016-9-30 11:20
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复