Socket套接字
与Windows相关的Socket套接字的API称为Soctet函数。 通信双方各有套接字。套接字与特定的IP地址和端口号相关。一般套接字类型可分为: 1. 流式套接字(SOCK_STREAM):使用TCP 2. 数据报(SOCK_DGRAM):使用UDP
网络字节流
网络字节流首先将数据中最重要的部分进行储存。通信数据可能会在不同的机器中进行传输,因此,所有的网络字节流必须按同一个只进行处理。
C-S模型的通信
- 用户需要两个套接字,分别运行于客户端(CLINENT-SOCKET)和服务端(SERBER-SOCKET)。
- 开始网络监听。对于服务器而言,实现不知道要服务于哪台客户机,因此处于等待链接的监听状态。监控网络状态,直到客户端发出请求,开始响应。
- CS套接字提出链接请求,目标是SS。客户端套接字需要描述要提供服务的SS方的IP地址和端口号。
- S响应C的请求,在本地创建一个新的进程,用于服务与C的通信。发送确认报文给C,当C收到,表示接收完毕。此过程中S可以继续处于监听状态,监听其他C的请求。
用到的库
- WINDOCK.h:头文件
- WINSOCK.lib:链接库文件
- WINSOCK.dll:动态链接库文件
套接字结构
- 连接使用的协议
- 本地IP
- 协议端口
- 目的IP
- 目的端口
举例:sockaddr_in, in_addr
struct sockaddr_in{
short sin_family; //使用的地址类型。例如IPv4(AF_NET)
unsigned short sin_port; //socket对应的端口号封装
IN_ADDR sin_addr; //IP封装
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;
};
CSocket
服务器端套接字: Bind():绑定本地IP、端口; Listen():监听 Accept():响应请求
客户端套接字: Connect():链接到服务器端
创建CSocketFile、CSocketArchive(数据传输)类