总体目标
通过使用c/c++进行网络编程,达到以下目标:
- 提高c/c++的熟练度
- 掌握网络编程的基本方法
- 熟悉Linux操作系统
- 熟悉一些软件管理/组织的方法
参考书籍/网站
- c/c++编程
《c++ primer 第5版》:c++入门经典。
《Effective c++》:c++实践中的高效做法。
《Head First 设计模式》:面向对象编程思想和常见设计模式的原理与思路。 - 网络编程初步
《TCP/IP详解:卷1》:协议篇,介绍了网络基础知识和概念,重点学习IP,TCP和UDP。
《UNIX网络编程:卷1》:介绍了socket API的使用,以及一些基本的网络编程方法,模型。这次初步学习网络编程主要参考这本书。 - Linux熟悉与使用
《鸟哥的Linux私房菜:基础篇》:主要是Linux的介绍和使用,不涉及内核或原理,帮助快速入门Linux命令界面。
《深入理解计算机系统》:涵盖计算机系统中主要概念和原理,对理解计算机系统有很大帮助。 - 软件管理/组织
git:git是用于版本控制或进行合作开发的软件
Github/Coding:Github是目前比较流行的代码托管平台,Coding与Github类似,两个平台都使用git作为版本控制工具。Github在国内的访问不太稳定,所以先使用Coding,之后再上传到Github。
CMake:当前最流行的项目配置工具,可对一套源代码,以指定结构生成针对不同平台/编译器的工程文件。在编写跨平台程序时很有用。
环境搭建
原本想在Linux使用vim和一些插件来搭建编程环境,但是相对于使用visual studio而言还是不太方便。所以最后决定主要还是在visual studio中编程,一些小的修改在vim中进行,对于两种系统socket API中有差异的地方利用系统宏定义来统一接口,然后用CMake配置工程(这样的代码还可以编译出Windows下的网络程序),用git同步代码。
服务器
服务器用了阿里云的学生优惠机,60元6个月(非广告)。相比于使用虚拟机,我觉得还是用服务器实战更好一些。按照官网步骤,最后在浏览器登录终端(提示符我已经修改过):
服务器上需要安装的软件有c++编译器(gcc/clang),git,cmake,tree(用来以树形结构展示目录)。在Ubuntu使用apt-get安装以上软件,很方便,基本上一条命令搞定。可以参考《鸟哥的Linux私房菜:基础篇》以及求助搜索引擎。安装失败的时候留意提示信息,比如阿里云服务器在使用apt-get时先要有一个更新的过程,根据提示就可以搞定了。
开发环境
在Windows下安装Visual Studio进行开发。此外还需要安装CMake,git,以及注册Github/Coding帐号。
第一个项目
创建一个Hello World项目来测试整个环境。
首先在Coding上创建项目
其中添加的.gitignore文件是用来控制git在上传时要忽略哪些文件,例如vs的大量工程文件是不需要上传的,我们只需要同步代码即可。
将项目下载到本地
在任意文件夹下右键启动git bash,输入:git clone [你的项目地址],将项目克隆到本地。
组织项目并上传
在本地项目目录下新建main.cpp和CMakeLists.txt文件。并编写内容:
// main.cpp #include <iostream> int main() { std::cout<<"Hello World"<<std::endl; return 0; }
# CMakeLists.txt。 推荐使用notepad++编辑,还会有提示。CMakeLists中'#'为注释 # 项目名称 project(hello) # CMake 最低版本号 cmake_minimum_required(VERSION 2.8) # 设置可执行文件生成路径。'.'表示当前目录,即构建工程的目录。 set(EXECUTABLE_OUTPUT_PATH .) # 查找当前目录下的所有源文件,并将名称保存到 DIR_SRCS 变量 aux_source_directory(. DIR_SRCS) # 通过这些源文件,指定生成目标 add_executable(hello ${DIR_SRCS})
然后,在git bash中,上传这些修改内容。
编译运行
登录到阿里云终端,通过git clone项目到本地:
新建在项目目录下build目录,然后在该目录下执行cmake ..(因为CMakeLists.txt在build的上个目录中)。此时生成了工程文件以及makefile,再执行make命令,进行编译。编译后在build下生成了hello可执行文件,然后./hello运行,输出hello world。
上一步中忘记编写.gitignore,如果提交修改到Coding之前,需要在该文件中增加一行 “build/”,即忽视build目录下的文件。
在Windows下也通过CMake生成vs的工程文件:
设置项目生成路径为build,然后在该目录下打开vs工程文件,编译运行即可:
之后的修改可以在vs中编写,然后git提交到代码库,然后在Linux中pull下最新代码,再编译即可。
总结
以上工作完成了基本的网络编程环境的搭建,有关CMakeLists.txt的更多用法,git的使用,之后有时间再进行总结。此外,在进行网络编程时,需要针对不同平台的一些差异,通过宏进行判断,统一出共同接口,才可以跨平台编程,这些工作在之后进行。
这是我的第一篇博客,只介绍了一些很简单的内容,但是居然花了2个多小时,可能是写有点繁琐,而且对写博客/使用Markdown不太熟练,之后会更注重效率,时间控制在1小时内。