Posted on 2010-01-24 01:44
sin 阅读(690)
评论(0) 编辑 收藏 引用 所属分类:
读书笔记
一 源代码编译也是在网上找的源代码编译方法,也很简单。
首先,在http://www.unpbook.com/unpv13e.tar.gz下载源代码。
二 几个重要的数据结构和函数1 sockaddr和sockaddr_in结构
struct sockaddr {
unsigned short sa_family;
char sa_data[14];
};
struct sockaddr_in {
short int sin_family;
unsigned short int sin_port;
struct in_addr sin_addr;
unsigned char sin_zero[8];
};
struct in_addr {
unsigned long s_addr;
};
这两个结构体大小一样,名字也比较像。Socket
API最初设计的时候,想设计的尽可能的通用(在<<TCP/IP进行网际互联>>里有提到过),不只限于TCP/IP协议,所
以sockaddr结构体只定义了协议族字段和预留了14个字节来表示某个协议地址(协议地址占多少位取决于协议的设计,所以只能预留14个字节)。
sockaddr_in结构体则像是为TCP/IP协议地址设计的结构体,有一个端口号和IP地址来指定。这也只是我的理解,并不一定对。
实际编程中,bind、connect、recvfrom、sendto等Socket API用到的是sockaddr结构体。由于现在TCP/IP协议已经成为标准,多数情况下用到的都是表示TCP/IP地址的sockaddr_in结构。
2 htons htonl 函数
将主机字节序转化为网络字节序。这是由于,不同主机可能使用不同的方式来存储字节,Inel机器就是小尾端,需要转化为一种统一的序列,方便在网络上传输处理,就是网络字节序。
3 inet_addr 函数
将"192.168.1.100"这样的字符串转化为IP地址,inet_addr返回结果已经是网络字节序,不需要再转化。
三 一个简单的客户/服务器程序