Chinaunix首页 | 论坛 | 博客
  • 博客访问: 19263
  • 博文数量: 4
  • 博客积分: 1591
  • 博客等级: 上尉
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-16 08:44
文章分类
文章存档

2010年(4)

最近访客

分类: LINUX

2010-05-16 10:49:37

Copyleft

拷贝或转载请保持文档的完整性,注明文档出处


调用系统提供的API(应用编程接口),程序员可以使用系统提供的网络功能。
Unix/Linux领域,常用的套接字为BSD套接字(Berkeley Socket):

一.套接字的地址:包括三个属性,协议,IP地址,端口号,具体实现为一个结构体

typedef unsigned short sa_family_t;
struct sockaddr
{
    sa_family_t sa_family; //注册套接字的地址族,AF_INET代表IP地址族
    char sa_data[14];
};

但是这个结构体没有定义确切的地址结构,因此,派生出了struct sockaddr_in

struct sockaddr_in
{

    sa_family_t         sin_family;//地址族

    unsigned short int  sin_port;//端口号

    struct in_addr      sin_addr;//地址

    unsigned char       sin_zero[*****]//这个一般不用,不详细写了

}

//其中,struct in_addr为

struct in_addr

{

    __32 s_addr;

}


注:

1.IP地址存放在 sin_addr.s_addr内;

2.地址和端口号都是网络字节序

二.套接字上的操作:

套接字接口上的系统调用

  过 程  客户端  服务器
  向系统注册一个socket,操作结果返回套接字描述符,以后的操作需要使用这个描述符  socket()  socket()
  绑定地址,想套接字分配一个本地地址
 bind()
 bind()
  服务器监听有没有连接请求,目前仅在TCP协议中使用
 
 listen()
  客户端建立连接,服务器接受连接。connect的作用是为发送的包指定目标地址。   connect()  accept()
  数据交换  write()|read()  write()|read()
  数据交换  send()|recv()  send()|recv()
  数据交换 这两个函数要求对所有发送的数据指定目标地址,为所有接受的数据制定来源地址。
 sendto()|recvfrom()  sendto()|recvfrom()
  数据交换  writev()|readv()  writev()|readv()
  数据交换  sendmsg()|recvmsg()  sendmsg()|recvmsg()
  关闭连接 close可以关闭连接,也可以关闭套接字描述符
 close()  close()

注:

1.黄色的 可选函数
2.灰色的 使用UDP协议时不使用
3.当服务器已经收到连接请求的前提下,accept才接受连接。

三。套接字操作函数

见第三篇《》

阅读(975) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:Netfilter体系结构-内核中的Netfilter框架

给主人留下些什么吧!~~