1、进程
当我们双击运行一个程序之后,进程会在内存中,为程序开辟空间,并且为程序的执行,构建一个环境。
线程执行代码,线程并不是主动执行代码,CPU调度线程来执行程序中的代码。
单线程带来的问题:程序中如果存在耗时操作,会把我的主线程卡死,整个程序都被卡死了。
多线程--->线程池---->异步编程模型----->await async
Thread th = new Thread(执行的东西);
将新线程设置为后台线程,主线程为前台,主线程关闭,则新线程也跟随关闭。th.IsBackground = true;
通知CPU,当前线程th已经准备好了,可以随时执行
th.Start();
取消跨线程的检查
Control.CheckForIllegalCrossThreadCalls = false;
当你关闭主线程/主窗体的时候,我们强制性的关闭新线程
th.Abort();
前台线程:只有所有的前台线程都关闭才能完成程序关闭
后台线程:只要所有的前台线程结束,后台线程自动结束
2、网络通信模型
网络五层模型
1.分层是为了更高效的通信及定位错误
2.每一层都使用了一些协议,目的是为了通信双方能够正常的通信以及理解对方的意图。
3.每一层功能的实现,都为了上层功能的实现做好了铺垫
4.越靠下的层,越接近硬件,越靠上的层越接近用户。
5.每层都对数据进行封装。
应用层:1.通过物理手段,将设备链接起来2.按照逻辑电位(高电位1,低电位O)进行数据的传输。
传输层:1.明确端口,表示应用身份,实现端口到端口的通信。
网络层:1.引入三个协议,IP协议,ARP协议,路由协议,实现设备到设备的通信。
链接层:1.确定了电信号的分组方式,把每组电信号当成一个数据包(帧)2.实现了网去到网卡的通信3.以广播的形式通过物理介质发送给接收方。
实体层:1.定义数据格式,并按照正确的格式解读。
ARP寻址协议: 1.PC1发起一个请求数据包,包含了目标计算机的IP地址2.PC1发送数据包到交换机3.交换机将PC1的数据包进行整个局域网的转发4.每台计算机都查看PCI发来的数据包,比对其中的IP地址5.IP相同则接收,并且回复Mac地址,否则丢弃。
两个应用程序,在网络中,是通过Socket实现数据通信的。
服务器的Socket:
第一个Socket:负责监听客户端的连接,不负责通信。
第二个Socket:负责的和客户端通信的Socket,通信,不负责监听。
客户端的Socket
连接服务器,和服务器通信
1.创建一个负责监听的Socket
Socket socketWatch = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
2.绑定监听端口
IPAddress ip = IPAddress.Parse(txtServer.Text);
IPEndPoint point = new IPEndPoint(ip,int.Parse(txtPort.Text));
3.开启监听
socketWatch.Bind(point);
4.设置监听队列
socketWatch.Listen(5);
5.展示等待连接的信息
ShowMsg("正在等待用户的连接");
6.接受客户端的连接
Socket socketTX = socketWatch.Accept();
7.接受用户消息
byte[] buffer = new byte[1024];
string msg = Encoding.Default.GetString(buffer);