一. 定义
typedef unsigned int SOCKET;
Socket相当于在进行网络通信 两端的插头.
二. 分类
(1) 流式套接字
定义: #define SOCK_STREAM 1
流式套接字提供了双向,有序的,无重复的以及无记录边界的数据流服务,适合处理大量数据.它是面向连接的,必须建立数据传输链路,同时还必须对传输的数据进行验证,保证数据的准确性.系统开销大.
(2) 数据报套接字
定义: #define SOCK_DGRAM 2
也支持双向的数据流,但是它不保证传输数据的准确性,保留了边界记录.由于它是无连接的,例如广播,所以不保证接收端是否在监听.传输效率较高.
(3) 原始套接字
定义: #define SOCK_RAW 3
保持了数据包中的完整IP头,可以通过原始套接字对数据进行分析.
(4) 其他(不常用就不做介绍)
三. socket开发所需要的文件
头文件: WinSock2.h
库文件: ws2_32.lib
动态库: w32_32.dll
四. 套接字地址结构
1. sockaddr结构
struct sockaddr
{
unsigned short sa_family; //为网络地址类型.一般为AF_INET,表示该socket在internet域中通信. sockaddr_in结构与该地址结构相同,由于它是用来标识TCP/IP协议下的地址,所以sockaddr_in相对sockaddr来说更常用,
char sa_data[14];
}
2. sockaddr_in结构
struct sockaddr_in
{
short sin_family; //为网络地址类型.
unsigned short sin_point; //为服务端口.不要使用固定的端口,如HTTP的80; 如设置为0,系统则会自动分配一个唯一的端口.
struct in_addr sin_addr; //为一个unsigned long类型的IP地址.
char sin_zero[8]; //为填充字段.
}
五. 套接字的属性
1. 读取socket属性
int getsockopt
(
SOCKET sock, //要读取属性的套接字
int level, //套接字选项的级别
int optname, //读取选项的名称
char FAR * optval, //存放选项值的缓冲区指针
int FAR * optlen //缓冲区的长度
)
2. 设置socket属性
int setsockopt
(
SOCKET sock,
int level,
int optname,
char FAR * optval,
int FAR * optlen
)
六. 套接字的使用
待续...