随笔分类 - C# Socket和Thread专题
涉及到socket的程序,基本都必须使用多线程。本专题将收录本人实际工作中完成的多个功能,并总结套接字多线程编程中的难点。
摘要:socket的英文原义是“孔”或“插座”。在这里作为4BDS UNIX的进程通信机制,取后一种意义。socket非常类似于电话插座。以一个国家级电话网为例。电话的通话双方相当于相互通信的2个进程,区号是它的网络地址;区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于socket号。任何用户在通话之前,首先要占有一部电话机,相当于申...
阅读全文
posted @ 2009-11-12 16:04
弹着钢琴设计
摘要:Socket编程中,客户端(即侦听端)会开启新线程用于侦听服务端套接字,当客户端需要开启多个信道以侦听不同的终端或同一终端的不同端口时,往往会给每一个通信对象开启一个线程,当两个终端超过一定的时限仍没有消息往来时,就需要关闭线程,那么问题来了:侦听线程会被阻塞在一个无限循环里,使用thread.Abort()或者thread.Suspend()方法,并不会使侦听线程立即结束,而是要等待相当长一段时...
阅读全文
posted @ 2009-11-09 14:06
弹着钢琴设计
摘要:在实际项目中,涉及套接字的都必须使用多线程,当接收端所接收到的消息需要显示到窗体控件上时,必须使用委托。这是因为窗体控件在窗体初始化时便被声明,即控件在主线程中被定义;而窗体控件具有一个属性,那就是:控件不具备跨线程的能力。因此,套接字编程中凡是涉及到窗体控件时,都必须调用控件的异步方法。下面举例说明: 1 发送端(或者客户端)程序代码:[代码] 发送端的界面很简单,如下图图1所示: ...
阅读全文
posted @ 2009-11-04 18:03
弹着钢琴设计
摘要:Socket通信有两种模式:阻塞模式和非阻塞模式。 1:阻塞模式 所谓阻塞模式,就是开启一个线程一直保持侦听状态(通过while(true)循环),这样该线程将一直在这个循环里运行,不会退出,因此该线程将被该循环所阻塞,是为阻塞模式。使用该模式进行通信时,必须开启一个新线程,不能将其置于主线程中,否则主线程什么事都干不了。 阻塞模式通信中又分为两种方式——重连接和持续...
阅读全文
posted @ 2009-11-04 17:54
弹着钢琴设计
摘要:Socket名为套接字,传输协议是TCP/IP或UDP。 在实际编程中,一般要实例化两个套接字——侦听套接字和发送套接字,实例化方法如下:1 侦听套接字:[代码] 实例化完成后,接着必须启用线程去接受套接字(用于阻塞模式),当然也可以不启用线程,此时需要使用非阻塞模式,具体代码见下文。 2 发送套接字:[代码]
阅读全文
posted @ 2009-11-04 12:03
弹着钢琴设计
摘要:这两个对象一般用于锁定一段代码,或者锁定一个对象。下面举两个例子予以说明: 1:锁定代码[代码] print(int a)中的代码被lock锁定,两个线程便只能依次访问这段代码,注意这里的类A是单例,这样是为了lock锁住的都是同一个对象。这里的lock也可以用Monitor对象来代替: [代码] 此时,一直锁定这段代码(即去掉Monitor.Exit(this)),结果将会很有趣:要么线...
阅读全文
posted @ 2009-11-03 17:00
弹着钢琴设计
摘要:Framework为我们提供了三个加锁的机制,分别是Monitor类、Lock关 键字和Mutex类。 总体而言,lock和monitor可以锁定对象,也可以锁定函数;而mutex一般用于锁定函数,并保证不同线程间同步调用函数,而不会受线程优先级影响。使用lock和monitor对象锁定对象时(即在对象外部锁定,或者在对象中的函数被调用的地方锁定对象),可以保证该对象一次只被一个线程所访问,但...
阅读全文
posted @ 2009-11-03 11:10
弹着钢琴设计
摘要:using System;using System.Text;using System.Threading;namespace ThreadTest{ class Program { static void Main(string[] args) { Student student = new Student(); new Thread(new ThreadStart(new Thread1(st...
阅读全文
posted @ 2009-10-27 11:40
弹着钢琴设计
浙公网安备 33010602011771号