Socket编程 套接字和版本号问题

Posted by Cata on July 19, 2019

@socket编程-套接字和版本号问题.

Socket套接字

与Windows相关的Socket套接字的API称为Soctet函数。 通信双方各有套接字。套接字与特定的IP地址和端口号相关。一般套接字类型可分为: 1. 流式套接字(SOCK_STREAM):使用TCP 2. 数据报(SOCK_DGRAM):使用UDP

网络字节流

网络字节流首先将数据中最重要的部分进行储存。通信数据可能会在不同的机器中进行传输,因此,所有的网络字节流必须按同一个只进行处理。

C-S模型的通信

  1. 用户需要两个套接字,分别运行于客户端(CLINENT-SOCKET)和服务端(SERBER-SOCKET)。
  2. 开始网络监听。对于服务器而言,实现不知道要服务于哪台客户机,因此处于等待链接的监听状态。监控网络状态,直到客户端发出请求,开始响应。
  3. CS套接字提出链接请求,目标是SS。客户端套接字需要描述要提供服务的SS方的IP地址和端口号。
  4. S响应C的请求,在本地创建一个新的进程,用于服务与C的通信。发送确认报文给C,当C收到,表示接收完毕。此过程中S可以继续处于监听状态,监听其他C的请求。

用到的库

  1. WINDOCK.h:头文件
  2. WINSOCK.lib:链接库文件
  3. WINSOCK.dll:动态链接库文件

套接字结构

  1. 连接使用的协议
  2. 本地IP
  3. 协议端口
  4. 目的IP
  5. 目的端口

举例: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(数据传输)类