Socket简介
Socket被称为套接字,描述了IP和端口等信息,是一个通信链的句柄。
微软专门开发了一套支持多种网络协议的网络编程接口,叫做Winsock,Winsock是Windos SDK的一部分,全称Windows Sockets API。它对多种协议做了封装,Socket就是Winsock对TCP协议的封装。
vc++是微软开发的一套开发工具,它不仅支持C和C++,还提供一套可视化编程框架MFC。虽然MFC很强大,但是Windos API开发出的程序体积更小、效率更快。
Socket通信流程
Winsock定义了一系列接口用于建立两台或多台机器之间的通信,最常见的是一台服务器跟多台客户机的通信。
服务器创建Socket程序流程
WSAStartup()->socket()->bind()->listen()->accept()->recv/send()->closesocket()
客户端创建Socket程序流程
WSAStartup()->socket()->connect()->send()/recv()->closesocket()
重点介绍一下bind()函数,这个函数用来给套接字绑定端口和IP信息:
int bind(SOCKET s,const struct sockaddr FAR *name,int namelen);
s:新创建的套接字,后面的提供的IP和端口会绑定它
name:这个结构体保存了IP和端口等信息,定义如下:
struct sockaddr{
u_short sa_family;
char sa_data[14];
}
sockaddr是为了保持各个特定协议之间的兼容性而设计的,这个结构体再细分就是:
struct sockaddr_in{
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
}
第三个成员是个in_addr结构体,定义如下:
struct in_addr{
union{
struct{ u_char s_b1,s_b2,s_b3,s_b4;}S_un_b;
struct{ u_short s_w1,s_w2;}S_un_w;
u_long S_addr;
}S_un;
}