前言
很多大学生学完C语言后就不知所措。不知道接下来可以学什么。《Unix环境高级编程》《Unix网络编程》等书籍虽然经典,但对于不少的同学来说都比较的枯燥,写这系列的文章讲述自己学C编程的经历吧。
第一个服务器程序HelloWorld
功能:
服务器启动后,每有一个新的链接进来,服务器都输出“HelloWorld”。
结果:
当有一个连接进来的时候,服务器输出Hello World.
我们通过netstat -apn | grep 8098 (我指定的端口可以看到链接的详情) 这里ESTABLISHED表示已经建立连接。这个与TCP状态有关,后面我们再进一步来讲解TCP的状态,这一部分的确比较枯燥无味。
代码:
我向来认为,对于新手来说,最好的方式莫过于看着代码进行讲解了。我们来看一下代码。
- 7-13行,这边是socket函数的一个wrapper,我们只是包裹了socket方法而已,socket(int domain, int type, int protocol) 这是一个生成一个socket的一个函数,里面的三个参数一般是一个组合。我们可以通过man socket进行了解。在第45行,我们申请了一个TCP,IPv4的Socket。
- 15-21行,bind函数,当我们用socket函数申请一个socket后,他并没有赋值给一个本地的地址,低48-52行我们将本地8098端口绑定该socket。
- 23-29行,listen函数,使用listen的socket将会等待Accept连接。
- 31-37行,accept函数,当我们调用accept函数时,程序将被阻塞,系统会返回等待列表中的第一个给我们。
这个之间我们可能带着诸多疑问,例如各个常量与参数,但我认为,对于新手来说,可能很多的细节问题可以等待后面进一步了解。
状态图
运行与测试
环境:ubuntu14.10
编译:g++ -g server.cpp
我们用telnet模拟客户端连接,后面我们会继续写客户端。