Socket编程
要了解Socket编程,我们首先来介绍一下什么是Socket。下面给出Socket的解释:
Socket,即套接字,是一种应用编程接口(API)
- Berkeley UNIX操作系统定义了一种API,称为套接字接口,简称套接字(Socket)
- 微软公司在其操作系统中采用了套接字接口API,形成了一个稍有不同的API,并称之为WINSOCK
- AT&T为其UNIX系统V定义了一种API,简写为传输层接口(TLI)
Socket API
- 最初设计是面向BSD UNIX-Berkley
- 面向TCP/AT&T为其UNIX系统V定义了一种API,简写为传输层接口(TLI)IP协议栈接口
- 目前是事实上的工业标准
- 绝大多数操作系统都支持
- Internet网络应用最典型的API接口
- 通信模型是C/S架构
- 应用进程间通信的抽象机制
套接字对外管理
- 使用IP+端口号标识通信端点
套接字对内管理
- 使用套接字描述符,类似于文件的抽象
- 当应用进程创建套接字时,操作系统分配一个数据结构存储该套接字相关信息
- 返回套接字描述符
地址结构
已定义结构sockaddr_in:
使用TCP/IP协议簇的网络应用程序声明端点地址变量时,使用结构sockaddr_in
Socket API函数(Winsock)
WSAStartup(初始化Window Socket API)
WSACleanup(释放所有的Windows Socket DLL)
关于网络字节顺序
TCP/IP定义了标准的用于协议头中的二进制整数表示,即网络字节顺序
某些Socket API函数的参数需要存储为网络字节顺序(如IP地址、端口号等)
可以实现本地字节顺序与网络字节顺序间转换的函数
- htons:本地字节顺序转为网络字节顺序(16位)
- ntohs:网络字节顺序转为本地字节顺序(16位)
- htonl:本地字节顺序转为网络字节顺序(32位)
- ntohl:网络字节顺序转为本地字节顺序(32位)