作者 |轩辕志峰
来源丨编程技术宇宙(ID:)
当我大一的时候,我就开始使用C语言进行网络编程。你知道,绑定、接收和发送。
我拿着从图书馆借来的一本书,按照上面的说明,一行一行地输入电脑。我成功编写了一个TCP服务器和客户端,可用于发送和接收消息。
不过客户端和控制端都运行在我自己的电脑上。给自己发信息很无聊。于是我把客户发给了我的室友,我就可以通过电脑和他交流了。
于是我们开始在黑暗的控制台窗口上聊天。尽管他就在我对面,尽管只是一条短信,尽管那么简单,室友仍然夸我伟大,这让我充满了成就感。原来网络编程这么有趣。
手术成功后,我和室友组队玩了几款穿越火线游戏。我很高兴~

第二天,我就开始考虑把客户端发给2公里外的女朋友,这样我们晚上在各自宿舍就可以用它代替QQ聊天。想想还挺浪漫的呢~

没想到立刻就被鄙视了。这是这么黑暗的事情吗?就不能做一个漂亮的界面吗?
是的,这东西确实不容易看到。至少得像QQ一样,有聊天界面,有发送按钮。如果还能发图片就更好了。
于是我又奋斗了一周,用VC++创建了一个简单的界面。我还添加了一个来自网络的漂亮皮肤,现在漂亮多了。
我兴奋地把程序发给女朋友,期待她用钦佩的目光看着我。
然鹅···
她居然在QQ上告诉我:弹出窗口说无法连接服务器!

我的服务器开放了吗?但它只是不能与生死联系起来。
我很快平静下来。老师教我可以用ping命令来查看网络是否连通。
我用QQ远程控制桌面,从她的电脑上ping我的电脑:
平 192.168.1.103
该死的!无法 ping 通!
我弱弱地向有经验的师兄请教,然后就被鄙视了:能ping通才怪,这是局域网地址!
我很困惑,什么是LAN地址?为什么我无法 ping 通?

那时我刚学C语言,刚刚开始上计算机网络课程。用新手来形容我一点也不为过。
于是我就开始疯狂收费,这时候我才知道什么是公有地址,什么是私有地址。我还了解到宿舍里的路由器有一个功能叫NAT,它偷偷地将我们电脑局域网的私有地址改为公网。地址,一离开宿舍,就使用公网地址进行通讯。
NAT的出现缓解了IP地址不足的问题,让我们宿舍的几个人可以共享同一个IP地址来上网。
现在看来这是一个非常简单的技术,但是如果你当时不知道的话,你就是不知道,所以就成了一个笑话。
于是我找到了路由器上WLAN口的公网IP地址,替换了客户端代码中的服务器地址,重新编译了一个包并发送给了女朋友。
现在应该没问题了吧?
然而,还是不行!
我想当你看到这个的时候,你心里也在说同样的话:如果这能行的话那就奇怪了!
是的,虽然已经改成了公网地址,但是路由器还没有配置转发。
奋斗了半天,我学会了一个东西,叫UPnP。我不得不在路由器上配置端口转发,将公网IP地址下的端口号映射到局域网下某个地址的端口,这样公网IP地址的路由器收到连接后就会转发到服务器在我的电脑上。
我登录到路由器的后端,映射并配置了我的服务器正在侦听的端口号,迫不及待地让我的女朋友再次尝试!
最后,这一次她告诉我:连接了!
最后,我给她发了第一条消息:Hello,World!
心情好,午餐加点荤菜吧~

使用IP地址建立连接毕竟不是一个好主意,因为路由器上的公共IP经常发生变化,而且每次变化都必须重新编译一个客户端,这很麻烦。
不然每次都要手动输入,但又不能每次都留一个输入框让女朋友填写IP地址。她一定会问我:为什么我登录QQ时没有填写QQ的IP地址?
于是我又搜索了一下,得知这个问题可以通过将IP替换为域名来解决。
程序代码中将IP替换为域名,然后动态解析为IP地址。服务器的IP地址不再需要硬编码到代码中。
但问题来了,这么蹩脚的东西还需要注册域名吗?注册域名需要支付更多费用吗?
公网IP频繁变动。域名映射的IP每次改变都得改变吗?这还是麻烦啊!
经过一段时间的研究,付双思了解到了一个叫DDNS动态域名解析的东西和一个叫花生壳的软件。我下载了一个客户端,我所有的问题都安排得很清楚了。

不需要自己注册域名,直接使用这个花生壳下的子域名即可。通过客户端,您可以随时更改域名映射的IP地址,方便快捷。
我又修改了程序,终于解决了问题。
但很快新的问题又来了。我的程序只能在服务器和客户端之间通信。如果第三人或第四人想加入怎么办?
继续改变!
让我们回到今天写这篇文章的主题。
经常有人在微信上问我:轩辕,我该怎么学xxx?我是新手,还有机会吗?
其实,谁不是小白出身,谁没有在求学的路上被人瞧不起、被人笑话?所谓学有先后,艺有专精,仅此而已。
从我自己的学习经验总结来看,想要拥有扎实的技术知识,光看课程、看书是不够的,还得去做!
只有当你真正做了一些项目,遇到实际问题时,你才会知道各种技术是什么意思,是用来解决什么问题的。这比您从书籍或博客中想象的要好。理解就更深了。
工作几年后,我发现基础知识积累最多、最快的时期是大学时期。工作后,我在日常工作中其实没有太多机会接触操作系统、计算机网络、数据结构和算法等基础课程知识。我花更多的时间写API接口,做CRUD,堆一堆框架代码。搭积木,或者学习redis、mysql等第三方组件的使用。
在大学期间,我大致做过以下项目:
- 即时通讯软件
- 静态网络服务器
-远程桌面控制软件
-网络流量恢复软件
- 内核ARK工具
虽然现在看起来一切都还比较粗糙,距离实用还很远,但是基本的功能都完成了,而且通过开发这些东西,不仅让我当时的编程能力提高了很多,而且在以后的这个过程中,我不断的提高自己的编程能力。发现了新的技术术语,打下了扎实的基础,学到了很多课本上没有的东西。
如果你是这个行业的新手,我的建议是不仅要看书,还要多做,Talk很便宜,给我看代码!
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。


客服1