日期:2014-05-17 浏览次数:20833 次
C#的UDP和TCP通信的详解
可以看到这个处理的基本步骤如下:????
??执行Receive函数,接收远程socket发送的信息;????
??把信息从字节转换到string;????
??处理该信息,然后进入下一个循环,继续等待socket发送新的信息。????
值得注意的有几个:????
??1:Receive函数。这个函数和Listener的Accept函数类似。在这个地方等待执行,如果没有新的消息,这个函数就不会执行下一句,一直等待。????
??2:接收的是字节流,需要转化成字符串????
??3:判断远程关闭联接的方式????
??4:如果对方的消息非常大,还得循环接收这个data。????
4:如何管理这些联接(thread)????
通过上边的程序,基本上可以建立一个侦听,并且处理联接会话。但是如何管理这些thread呢?不然大量产生thread可是一个灾难。????
管理的方法比较简单,在Listener里面我定义了一个静态的哈希表(static?public?Hashtable?Connections=new?Hashtable();),存储Connection实例和它对应的Thread实例。而connection中也加入了一个最后联接时间的定义(private?DateTime?_lastConnectTime;)。在新链接建立的时候(Listener的Accept()之后)就把Connection实例和Thread实例存到哈希表中;在Connection的Receive的时候修改最后联接时间。这样我们就可以知道该Connection在哪里,并且会话是否活跃。????
然后在