C#Socket
一.网络协议
如果要理解Socket,要熟悉TCP/IP即传输控制协议/网间协议,定义了主机如何连入因特网,数据如何在它们之间传输的标准。
TCP/IP协议参考模型,把所有的TCP/IP系列协议归类到四个抽象层中:应用层,传输层,网络层,数据链路层,每一抽象层建立在低一层提供的服务上,并且为高一层提供服务。
互联网为什么分层?
层与层之间定好规则(就是接口),每一层做好自己的事,层可以内部演化。
协议:规范,遵守的规则
一共分为几层?5层,下面具体分析一下这5层
实体层
物理连接,光纤/电缆等。传递的是0和1
链接层
规定一下0和1的解读方式。
以太网
- 大概是一组信号当做数据包,成为帧-Head-data
- Head:描述信息(发送者---接收者)
- Data:真实数据
- 数据必须是网卡到网卡的(每个网卡有Mac地址)
- 广播一下,对着局域网的全部网卡都发一遍
互联网是多个局域网组成的。局域网是子网络。
网络层
- 解决不同的计算机,在不同的局域网通讯问题。
- IPV4确定属于哪个子网,独立的IP比较贵的。每个计算机都有一个IP地址:192.168.1.1一共32位的
- 把帧里面data分成2块(Head包括IP地址+长度,data真实数据)
- 帧长度是有限制的,如果超过,会拆成不同的包,每个包都有head和包序号
传输层
- 问题:电脑里面多个程序都使用网络,帧过来,到底给那个程序?得有个东西,告诉去给那个程序。(端口改闪亮登场了....)
- 保证:电脑上的某程序的信息,发送到某个电脑上的某个程序。
- 端口:0~65535,其中0到1023系统用的。保证程序和程序进行交流
- 主机+端口=套件字(Socket),socket其实就是保证分布在不同电脑的程序交互,可以做网络应用程序开发
- UDP协议,把data拆分成head+data(head只放端口)。不保证数据一定会被收到。特点:简单,可靠
- TCP协议,数据的可达性,确保数据不丢失,确认过程。复杂版本的UDP。特点:负载低效,抵消更多资源,可靠。
应用层
http协议举例,说明data数据里面的含义。指定data里面什么格式,什么意义。
二.网络通讯
推荐一个框架,跨平台的
中文网站
Supersocket有三大对象:Session,AppServer,Commands
- Session:每个用户的连接,就是一个Session
- AppServer:Socket服务器的实例
- Commands:客户端回发数据的命令
客户端发的信息格式:CommandName+空格-+参数0+空格+参数1+空格+参数N+\r\n
服务端的处理:CommandName命令类来处理
心跳检测机制:
- 用来检测客户端是否掉线,客户端在线,间隔时间内服务器发送一个心跳包,服务器返回应答。
- 如果心跳周期内,没收到,服务器就认为你下线了