C++与Linux网络编程实战

C++与Linux网络编程实战

序言:

      最近老板给我的这个课题中,我的主要工作是进行论文中所设计的算法与整个系统的原型implementation与大规模实际场景的simulation。这对于没有较大规模编程经验的我来说,不啻为一次较大的挑战,虽然我更加喜欢原创性的科研思考工作,但基本的编程能力对于任何一个计算机人来说,都是基础而重要的。所以也打算借这次机会好好的把自己的编程能力与素养训练一下,为以后进一步的发展打好坚实的基础。

      其实,很多事情应该是在本科阶段就训练完成的,但我本科期间未能得到良师的指引。一方面,学习的知识偏重于原理的理解、内在思想的把握,更加推崇数学上、理论上的相关知识的学习,动手能力十分的欠缺,同时也是受周围环境的限制,没有能真正扎实的进行代码量的积累,导致许多东西,如C、C++,只是局限于对其基本语法的了解,以考试为目的的学习自然难以提高真正的动手能力。另一方那个面,我学习的东西太杂而不够深入,意识上过于注重知识的广博而没有在某一方面由深入扎实的研究,这不能不说是那时候自学能力提升过程中付出的不小的试错代价。

     本次课题任务中的实验主要是Linux下的分布式网络编程与密码编程。在密码编程方面,之前已经有两次使用Crypto++密码学库实现相关密码操作的经验,所以这次密码部分的编程任务对我来说也并不过于困难。困难的在于Linux下的分布式的网络编程。

     1,首先需要了解Linux下编程的一般方法,这基本上包括Vim编辑器的配置与使用,程序的调试方法(如gdb的使用,各种ps、netstat等命令查看系统运行、网络状态等)、Makefile多程序编译管理······这许许多多的内容,以前都是只有过简单的了解,需要在这次任务中进一步得掌握这些技能。

     2,Linux下的系统编程,尤其是与Socket相关的编程。这主要是需要两本书《Unix高级环境编程》与《 Unix Network Programming, Volume 1: The Sockets Networking API 》。这两本书籍可以说都是技术类书籍的典范之作了,也是公认的bible。但这两本书的内容都是极多的,我显然不可能完整的将所有的细节都看完,所以对这两本的学习不得不为我所用,注重其中核心知识以及与我的任务相关的部分学习,这样才可能让我在课题的deadline前完成任务。我所需要的主要是进程、线程的基本函数以及对于其并发性的控制;Socket相关的完整网络多方通信;File相关的读写、控制、网络交互;基本的调试技巧等。

    3,C++编程能力的进一步提升。虽然自己一直以来主要的编程语言是C++,但很难说自己对其掌握的很好。一直以来都希望能将C++方面几本重要的书籍看一看。这次再simulation部分将需要在程序中对多达几百个object的管理调度,这显然是需要对于C++知识有进一步的了解的。所以这次将主要是下狠心掏了100多大洋买了最新的《C++ Primer 5th edition》(对于一个每个月只有几百补贴的小研来说这可确实是一笔不小的开销啊),希望能基于此进一步卯实自己的语言编程能力,也是给自己一个经济与心理上的incentive。

    

好了,废话不多说了,还是放开手脚,开始实战吧!接下来的过程肯定不会很轻松,但一定要坚持下去。

这一系列的学习将主要以博客等的形式发布,在此过程中根据任务的进展与需要可能会显得学习的跨度较大、没有条理。待任务最终完成后会重新整理下这一系列的博客。使其可读性、参考性更强。


10月23日,今天终于把几个bugs全部清除了!

几点感想:

1.调试程序一定要有耐心!当发现很奇怪的bug时,要明白一定是什么地方有问题了,要冷静的一步一步准备调试。

2,许多时候我们会认为是我们在程序中使用的一些不熟悉的技术或者高级的技术那里出现了问题。当其实大部分时候导致程序运行不对的往往是一些我们

没有注意到的小地方,而我们对这些小地方过于习以为常而没有引起重视。

3,要有全局的意识,一个地方出错了,我们要从整体到局部不断的定位错误的所在。

4,多尝试可能的解决方案,有些时候我们试了一下解决了,而这解决方案并不是理论上、计划上能解释的通的。





你可能感兴趣的:(网络编程,编程,Unix)