美文网首页通往成功之路
c#多线程和Socket笔记

c#多线程和Socket笔记

作者: 此十八 | 来源:发表于2018-08-12 21:11 被阅读6次

进程和线程:

        一个进程至少有一个线程,同一个进程中的多个线程可以并发执行。所谓的并发只是不停的切换,只是电脑切换的太快了,人我们的大脑感觉到是在并发执行。

        线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针,程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。

        多线程是指程序中包含多个执行流,即在一个程序中同时运行多个不同的线程来执行不同的任务(代码),也就是说单个程序创建多个并行执行的线程来完成各自的任务。

        线程肯定也要执行一段代码的。所以要产生一个线程,必须先为该线程写一个方法,这个方法中的代码就是该线程运行所要执行的代码。

        线程启动时,通过委托调用该方法。 

        为什么要用多线程?

1.让计算机“同时”做多件事情,节约时间。

2.后台运行程序,提高程序的运行效率,也不会是主界面出现无响应的情况。

3.多线程可以让一个程序“同时”处理多件事情。

4.计算机CPU大部分时间处于空闲状态,浪费了CPU资源。

        产生一个线程的4步骤:

1.编写产生线程所要执行的方法。

2.引用Syetem.Threading命名空间

3.实例化Thread类,并传入一个指向线程所要运行方法的委托。如:Thread thread=new Thread(一个委托:无参数无返回值的方法);

4.调用Thread实例的Start方法,标记该线程可以被CPU执行,但具体执行时间由CPU决定。如:Thread.Star();

前台线程:只有所有的前台线程都关闭才能完程序关闭时。默认为前台线程。

后台线程:只要所有的前台线程结束,后台线程自动结束。将一个线程设置为后台线程thread.IsBackground=true;

每个线程单独执行方法。

        线程执行带参数的方法:

        方法:void ShowTxtName(object name);

        ParameterizedStart pts=new Parameterized(ShowTxtName);

        Thread thread new Thread(pts);

       thread.IsBackground=true;

        thread.Start(txtName.Text);

也可以不创建Parameterized对象,直接:Thread thread=new Thread(ShowTxtName);

        多线程执行带多个参数的方法时:由于线程接受的参数是object类型的,所以我们可以传数组,结构,或泛型,还有ArrayList等。  

Socket相关概念:

(1)socket英文原意是“孔”或插座,作为进程通信机制,去后一种意思。通常也称作套接字,用于描述IP地址和端口,是一个通信链的句柄。(其实就是两个程序通信用的)。

(2)socket非常类似于电话插座,以一个电话网为例,电话的通话双方相当于相互通信的两个程序,电话号码就是IP地址,任何用户在通话之前,首先要占用一部电话机,相当于申请一个socket,同时要知道对方的号码,相当于对方有一个固定的socket,然后向对方拨号呼叫,相当于发出连接请求,对方假如在场并空闲,拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一方挂起电话机相当于关闭socket,撤销链接。

(3)在Internet上有很多这样的主机,这些主机一般运行了多个服务软件,同时提供几种服务,每个服务打开一个socket,并绑定到一个端口上,不同的端口对应不同的服务(应用程序)。

(4)例如:http使用80端口,ftp使用21端口,smpt使用23端口

(5)有两种类型:

a.流式socket(STREAM):是一种面向连接的socket,针对于面向连接的tcp服务应用,安全,但是效率低。

b.数据报式socket(DATAGRAM):是一种无连接的socket,对于无连接的UDP服务应用,不安全(丢失,顺序混乱,在接收端要分析重排及要求重发),但效率高。

Socket一般应用模式:(服务器端和客户端)

1.服务器端的Socket(至少需要两个)

(1)一个负责接收客户端连接请求,但不负责与客户端通信

(2)每成功接受一个客户端的链接便在服务端产生一个对应的Socket

a.在接收客户端连接时创建

b.为每个连接成功的客户端创建一个对应的socket(负责和对应的客户端通信)

2.客户端Socket

(1)必须指定要连接的服务端地址和端口

(2)通过创建一个Socket对象来初始化一个服务器端的TCP链接

Socket的通讯过程:

1.服务器端:

(1)申请一个Socket

(2)绑定到一个IP地址和一个端口上

(3)开启侦听

2.客户端:

(1)申请一个Socket

(2)连接服务器(指明IP地址和端口号)

3.服务器接到连接请求后,产生一个新的Socket(端口大于1024)与客户端建立连接并进行通讯,原侦听Socket继续侦听。

相关文章

网友评论

    本文标题:c#多线程和Socket笔记

    本文链接:https://www.haomeiwen.com/subject/gpnkbftx.html