数往知来 ASP.NET_多线程_Socket<十五>
一、ASP.NET
B/S 做网站(动态)、管理系统(OA,进销存等)
C/S--窗体软件
为什么现在很少用C/S做进销存等软件
B/S部署方便 C/S要安装
动态:与服务器(IIS(软件))进行交互
我们用C#写网站浏览器是不认识C#的那么我们的C#语言就由IIS进行执行
二、委托
就是方法的指针
指针:指向方法再内存中的地址
安全:委托就是封装了一个方法的地址,就好像一个指针指向了这个方法在内存中的地址,
那么调用的时候就是找到了这个方法的内存的地址,那么你就是调用的这个方法,为什么说它是安全的呢,
指针可以指向任何方法,那么如果指向了系统的方法你写入数据这时候就出问题了,
那么委托呢就好像我就规定了你只能调用你给我传进来的这个函数,
委托链
三、文件流
四、多线程
Thread thread=new Thread(一个委托变量);
thread.start();
1)方法的重入问题(数据的同步)
当我们有多个线程都调用一个方法的时候,就会出现一个同步的问题 出现数据混乱,
就是第一个线程调用执行这个方法的时候因为CPU执行的非常快第一个线程还没有执行完这个方法第二
个线程又进来又执行这个方法,那么这时候数据就不同步了,解决方案就是给这个方法加个锁 lock。
加锁之后,第一个线程进来之后这个方法就被锁住了,只有当这个线程执行完这个方法的时候释放这个锁,
其它线程才能执行
private void button1_Click(object sender, EventArgs e) { //定义一个无参无返回值的委托,调用Thread委托参数无参的构造方法 ,
通过委托指定一个要调用的方法 ThreadStart del = new ThreadStart(ShowNum); //不进行跨线程的检查,默认是true, TextBox.CheckForIllegalCrossThreadCalls = false; //创建一个新的进程,把委托变量传过去 Thread thread = new Thread(del); //系统会把这个进程设置为可运行状态
; i < ; i++) { int a = Convert.ToInt32(textBox1.Text); a++; textBox1.Text = a.ToString(); } } }
2)后台线程
我们的UI线程就是前台线程,我们自己创建的线程默认都是前台线程,
那么一个进程只有全部的前台线程结束以后才会结束,比如说我们创建一个窗体程序,
在里面创建一个新的线程
我们的窗体线程默认有个UI线程,当这个新的线程在执行的时候,
如果关闭窗体(就是结束UI线程),那么这个程序是不会被结束的,
因为这个新的线程在创建的时候默认是前台线程,只有所有的前台线程都结束之后程序才会关闭,
那么此时就会出现一个情况,就是当用户点击窗体关闭按钮之后只是把这个窗体关闭了程序还是没有结束,
它会等这个新的线程执行完毕之后才会关闭
//定义一个委托,通过委托指定调用一个方法
ThreadStart start = new ThreadStart(SocktListen);
//创建一个新线程
Thread thread = new Thread(start);
//设置为后台线程
thread.IsBackground = true;
TextBox.CheckForIllegalCrossThreadCalls = false;
thread.Start();
--》解决方案
把我们创建的线程设置成后台线程
Thread thread=new Thread(一个委托变量);
thread.IsBackground=true;
thread.start();
建议我们创建的线程都设为后台线程,当所有的前台进程都结束之后后台线程会自动结束,
就不会出现上面的情况了
3)线程调用带参数的方法
Thread的构造函数其中的两个带委托变量的重载,一个委托的签名是无返回值无参数的,
一个是无返回值带一个object类型的参数,
那么我们要传递多个值就可以通过一个Start()方法集合传过去, thread.Start(list);
传递多个值 : 通过集合
private void button2_Click(object sender, EventArgs e)
{
//准备参数
List<string> list = new List<string>() { "哈哈","呵呵","嘿嘿"};
//定义一个Thread带ParameterizedThreadStart委托变量的构造函数
这个委托是带一个object类型参数的委托
ParameterizedThreadStart par=new ParameterizedThreadStart (Func);
Thread thread = new Thread(par);
//通过Strat()方法把参数传过去
thread.Start(list);
}
void Func(object obj)
{
List<string> list=obj as List<string>;
foreach (string item in list)
{
MessageBox.Show(item);
}
}
4)socket
1)浏览器和服务器软件就是通过Socket通信的。(就首相两个人通过电话联系)
2)浏览器和服务器软件通过http协议的语法来规范发送的数据格式
(这个http协议就好像两个人在电话中用中文通话,不能一个人用中文一个人用英语 ,
这样两个人就进行不了交流了)
http1.1版本前,都是使用的端连接,也就是当浏览器发送一个请求,服务器负责监听的Socket
(监听套接字)会产生一个新的Socket(通信套接字)与之进行数据交流,
然后这个通信套接字会到硬盘里把浏览器(客户端)请求的数据发送给浏览器(这就是响应),
然会会立即断开,如果浏览器要再次请求,就需要再建立连接。
http1.1版本开始使用长连接,服务器接收一次请求发出响应报文后会保持这个连接一段时间,
在这段时间内当浏览器需要重新请求数据时会使用这个当前的连接,
如果超过这daunting时间这个连接就会断开。
这样的好处
--》服务器不会一直和浏览器保持连接,从而使得效率很低。
--》当服务器需要再次请求数据的时候就可以通过当前的连接,超过一段时间之后就会自动断开
private void btnListen_Click(object sender, EventArgs e)
{
//定义一个委托,通过委托指定调用一个方法
ThreadStart start = new ThreadStart(SocktListen);
//创建一个新线程
Thread thread = new Thread(start);
//设置为后台线程
thread.IsBackground = true;
TextBox.CheckForIllegalCrossThreadCalls = false;
thread.Start();
//SocktListen();
}
void SocktListen()
{
//首先服务端需要创建一个Socket监听对象,监听客户端的请求
//第一个参数:IP的版本
//第二个参数:以流的形式进行交互进行数据传输
//第三个参数:采用的协议:TCP
Socket socketlisten =
new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//获取IP地址
IPAddress ip = IPAddress.Parse(txtIP.Text);
//通信节点,包括ip地址和端口号
IPEndPoint ippoint = new IPEndPoint(ip, Convert.ToInt32(txtDunkou.Text ));
//将通信节点(ip地址、端口号)绑定到负责监听的Socket上
socketlisten.Bind(ippoint);
//设置监听队列,把这个socket设置为侦听状态,可以设置最大监听数,
这个最大监听数是根据服务器的机器性能来设置,
//如果这个数设置为10,那么一次处理客户端的10个请求,多的就要排队,
等前面的10个请求处理完之后依次处理后面的
socketlisten.Listen(10);
Socket clientsocket = socketlisten.Accept();
ShowText("客户端连接成功");
//给每一个客户端请求单独new一个Socket进行数据的交流
}
void ShowText(string str)
{
txtContent.Text = str;
}
数往知来 ASP.NET_多线程_Socket<十五>的更多相关文章
- “全栈2019”Java多线程第二十五章:生产者与消费者线程详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- “全栈2019”Java多线程第十五章:当后台线程遇到finally
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- Java线程和多线程(十五)——线程的活性
当开发者在应用中使用了并发来提升性能的同时,开发者也需要注意线程之间有可能会相互阻塞.当整个应用执行的速度比预期要慢的时候,也就是应用没有按照预期的执行时间执行完毕.在本章中,我们来需要仔细分析可能会 ...
- Java多线程(十五):CountDownLatch,Semaphore,Exchanger,CyclicBarrier,Callable和Future
CountDownLatch CountDownLatch用来使一个线程或多个线程等待到其他线程完成.CountDownLatch有个初始值count,await方法会阻塞线程,直到通过countDo ...
- JAVA多线程学习十五 - 阻塞队列应用
一.类相关属性 接口BlockingQueue<E>定义: public interface BlockingQueue<E> extends Queue<E> { ...
- 教你50招提升ASP.NET性能(十五):解决性能问题时不要低估UI的价值
(26)Don’t underestimate the value of the UI when tackling performance problems 招数26: 解决性能问题时不要低估UI的价 ...
- [Python 多线程] Concurrent (十五)
concurrent包只有一个模块: concurrent.futures - 启动并行任务 异步并行任务编程模块,提供一个高级的异步可执行的便利接口. futures模块提供了2个池执行器 Thre ...
- “全栈2019”Java多线程第二十四章:等待唤醒机制详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- “全栈2019”Java多线程第十四章:线程与堆栈详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
随机推荐
- HDFS dfsclient写文件过程 源码分析
HDFS写入文件的重要概念 HDFS一个文件由多个block构成.HDFS在进行block读写的时候是以packet(默认每个packet为64K)为单位进行的.每一个packet由若干个chunk( ...
- 求1+2+…+n,要求不能使用乘除法、for、while、if、else、s witch、case 等关键字以及条件判断语句(A?B:C)和不用循环/goto/递归输出1~100的10种写法
来源:据说是某一年某个公司的面试题 题目:求1+2+…+n, 要求不能使用乘除法.for.while.if.else.s witch.case 等关键字以及条件判断语句(A?B:C) 分析:这题本来很 ...
- 使用Windows Azure PowerShell远程管理Windows Azure虚拟机
对于Windows Azure,如果你还在使用windowsazure.com门户来管理虚拟机,那就显得不怎么高上大了.Windows Azure PowerShell 是一个功能强大的脚本环境,可用 ...
- 在ump系统的那半个多月-jqGrid
2012.04统一监控平台项目打酱油的日子 系统介绍: 目标,致力于服务于公司内部的所有系统,对所有接入监控的系统进行监控,包括系统监控,URL存活监控,端口存活监控,方法监控等. 作为打酱油的我,没 ...
- JavaScript —— 如何判断一个非数字输入
在页面里,如何用JS去判断一个用户输入是不是一个数字. 你是不是首先想到了正则表达式? JS里有个现成的函数,isNaN(x) isNaN(x) 函数可用于判断其参数是否是 NaN(Not a Num ...
- 错误 -force-32bit 与 ANDROID_EMULATOR_FORCE_32BIT=true
1,配置环境变量, 加上ANDROID_EMULATOR_FORCE_32BIT=true 2,在AS中启动模拟器用下面方法 在你要运行的个工程右击->Run as -> Run conf ...
- Oracle EBS 寄售业务总结
总述: 须通过一揽子采购协议(BPA)明确采购方与供应商之间的寄售关系,及各种协议条款: 通过来源补充规则(Sourcing Rules)明确物料的供应商以及分配规则: 通过合格供应商列表(ASL)明 ...
- [每天一道A+B]签到检测程序
签到检测程序,解析github提供的api内的json,解决了服务器和本地时间不同步的问题(时差+8H),实现按日期更新当前签到表.下一步是从api获取organization的信息,求出未签到的成员 ...
- CSS3之创建透明边框三角
简述 在前面,我们分享过关于三角的实现方式,主要根据border属性来设置,下面我们来实现上.下.左.右各种不同颜色的三角. 简述 实现 效果 源码 实现 效果 源码 <!DOCTYPE htm ...
- Codeforces Round #291 (Div. 2)
A 题意:给出变换规则,单个数字t可以变成9-t,然后给出一个数,问最小能够变成多少. 自己做的时候理解成了不能输出前导0,但是题目的本意是不能有前导0(即最高位不能是0,其余位数按照规则就好) 55 ...