sin的博客

时间悄悄地流过,今天你做了什么
posts - 17, comments - 3, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

UNP读书笔记一 Socket编程的简单介绍!

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返回结果已经是网络字节序,不需要再转化。


三 一个简单的客户/服务器程序

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理