内容概要:
1. 网络里非常重要的一个模型:C(客户端client)-S(服务器server)模型,进程间构成该模型,可能在不同主机上,也可能在同一主机上。
2. TCP/IP协议栈四层模型,如下图所示(摘自维基百科),socket是传输层的接口。
3. 重要的标准:POSIX标准,大部分厂商都采用该标准的网络API
4. TCP/UDP一般都需要指定协议族、IP地址、端口号。
5. TCP客户端读取的socket流程:socket()-> connect() -> read()
TCP服务器的socket流程:socket() -> bind() -> listen() -> accept() -> write()
6. 技巧:要认真对待错误处理,包裹函数技巧(Wrapper Functions)
编程实践:
网上下到书的源码unpv13e,都是基于unix系统的,重装BSD或者Linux不值当,虚拟机估计跑会卡,先使用Cygwin试试吧,Cygwin能在windows上模拟unix编程环境,普通编译代码可以生成在windows下的exe执行文件,打算今后多学习学习。
安装Cygwin网上的教程一抓一大把,一个不错的说明:下载安装Cygwin。
注意“Devel”分支把必须装的编译调试组件都装了。
安装完成以后
1) 运行Cygwin终端,/cygdrive目录下挂在有windows的盘符,cd切到unpv13e目录下
2) 参见unpv13e代码的ReadMe文件,运行./configure检查配置生成Makefile
3) 依次运行cdlib -> make,cd ../libfree -> make
4) 后面的cd../libroute编译不过,没有4.4BSD的代码文件,暂时不管了,后续学到再搞
5) 实验第一章的例子,cd../intro –> make daytimetcpcli,生成了daytimetcpcli.exe文件
6) 运行 ./daytimetcpcli 127.0.0.1
第一次运行返回错误connecterror: Connection refused
到网上搜了一下,Connectionrefused 这个错误的一般情况下是:IP地址可以访问,但端口无法访问,马上想到要访问的时间服务没有开启,windows下可以在cmd下用netstat -na检查ip和端口,发现我的windows果然没开13端口。
这里要注意此例子要访问的服务是daytime服务,刚开始我以为是NTP服务,运行了该服务还是没反应,后来一看NTP是UDP的且是123端口,才重新查了一下,第一章的这个时间服务用的是daytime服务,在windows 组件向导里面选择”网络服务”->”简单Tcp/ip服务” 勾上,就会安装好daytime服务。
网络编程常用代码:
函数名或宏名 | 说明 |
bzero | 对一块内存清0 |
inet_pton | 点分十进制字符串转为int数值 |
htons | 主机序转网络序(大端) |
|
|