《Unix网络编程卷1》笔记(1):第一章简介——使用Cygwin运行示例代码

内容概要:

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 -> makecd ../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

主机序转网络序(大端)

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章