sockaddr 文件传输案例 2 什么是 Socket Socket 接口是 TCP/IP 网络的 API , Socket 接口定义了许多函数或例程,程序员可以用它们来开发 TCP/IP 网络上的应用程序。要学 上的 TCP/IP 网络编程,必须理解 Socket 接口。 Socket 接口设计者最先是将接口放在 Unix 操作系统里面的。如果了解 Unix 系统的输入和输出的话,就很容易了解 Socket 了。网络的 Socket 数据传输是一种特殊的 I/O , Socket 也是一种文件描述符。 Socket 也具有一个类似于打开文件的函数调用 Socket() ,该函数返回一个整型的 Socket 描述符,随后的连接建立、数据传输等操作都是通过该 Socket 实现的。常用的 Socket 类型有两种:流式 Socket ( SOCK_STREAM ) 和数据报式 Socket ( SOCK_DGRAM )。流式是一种面向连接的 Socket , 针对于面向连接的 TCP 服务应用; 数据报式 Socke t 是一种无连接的 Socket ,对应于无连接的 UDP 服务应用。 Socket 建立为了建立 Socket , 程序可以调用 Socket 函数, 该函数返回一个类似于文件描述符的句柄。 socket 函数原型为: int socket(int domain, int type, int protocol); domain 指明所使用的协议族,通常为 ,表示互联网协议族( TCP/IP 协议族); type 参数指定 socket 的类型: SOCK_STREAM 或 SOCK_DGRAM , Socket 接口还定义了原始 Socket ( SOCK_RAW ),允许程序使用低层协议; protocol 通常赋值"0" 。 Socket() 调用返回一个整型 socket 描述符,你可以在后面的调用使用它。 Socket 描述符是一个指向内部数据结构的指针,它指向描述符表入口。调用 Socket 函数时, socket 执行体将建立一个 Socket , 实际上" 建立一个 Socket" 意味着为一个 Socket 数据结构分配存储空间。 Socket 执行体为你管理描述符表。两个网络程序之间的一个网络连接包括五种信息: 通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。 Socket 数据结构中包含这五种信息。 Socket 配置通过 socket 调用返回一个 socket 描述符后,在使用 socket 进行网络传输以前, 必须配置该 socket 。面向连接的 socket 客户端通过调用 Connect 函数在 socket 数据结构中保存本地和远端信息。无连接 socket 的客户端和服务端以及面向连接 socket 的服务端通过调用 bind 函数来配置本地信息。 Bind 函数将 socket 与本机上的一个端口相关联, 随后你就可以在该端口监听服务请求。 Bind 函数原型为: int bind(int sockfd,struct sockaddr *my_addr, int addrlen); Sockfd 是调用 socket 函数返回的 socket 描述符,my_addr 是一个指向包含有本机 IP 地址及端口号等信息的 sockaddr 类型的指针; addrlen 常被设置为 sizeof(struct sockaddr) 。 struct sockaddr 结构类型是用来保存 socket 信息的: struct sockaddr { unsigned short sa_family; /* 地址族, AF_xxx */ char sa_data[14]; /* 14 字节的协议地址*/ }; sa_family 一般为 , 代表 ( TCP/IP ) 地址族; sa_dat a 则包含该 socket 的 IP 地址和端口号。另外还有一种结构类型: struct sockaddr_in { short int sin_family; /* 地址族*/ unsigned short int sin_port; /* 端口号*/ struct in_addr sin_addr; /* IP 地址*/ unsigned char sin_zero[8]; /* 填充 0 以保持与 struct sockadd r 同样大小*/ }; 这个结构更方便使用。 sin_zero 用来将 sockaddr_in 结构填充到与 struct sockaddr 同样的长度,可以用 bzero() 或 memset() 函数将其置为零。指向 sockaddr_in 的指针和
sockaddr 文件传输案例2 来自淘豆网m.daumloan.com转载请标明出处.