日期:2014-05-18  浏览次数:20830 次

关于TcpListener的问题
1、我现在想做这样的一个功能,服务端接收数据,可以接收多个客户端的。每当有一个客户端连接成功时,当前监听就被占用了,我就开一个新的监听,最多有256个监听。
2、当有一个客户端断开连接时,这个客户端所占用的监听就是空闲的了,这样就至少有两个空闲监听了。如果空闲监听多于两个的时候,我就把多出来的给关掉。
3、在关闭监听的时候,我不知道哪个监听是空闲的,也不知道空闲监听是否多于两个。所以我就想弄一个TcpListener的列表List<TcpListener>,把每个一开启的监听都装进这个列表里。我再用循环来判断有几个监听是空闲的,如果多于两个的话,我就从高往低关闭监听,并Kill掉线程。

大家帮我看看我的这个办法可行么?另外,怎么样Kill掉当前监听的线程?也就是说如何获取要关闭的监听所在的线程呢?
谢谢大家。

------解决方案--------------------
你所指的最多256监听是不是应该理解为客户端的连接数呢?
对于简单的tcp的程序,每一个客户端连接进来就开一个线程和他保持联系,同时将此连接放入一个列表中,
方便管理。对于客户端的正常退出、意外退出、断网、断点你服务器的线程必须能够处理。一定确保不要把一个已经断开的线程驻留在程序中,时间久了你的程序迟早要崩溃的。
------解决方案--------------------
什么叫做空闲监听?怎么会每一个客户端连接占用一个线程?

这都是什么啊?!

只是告诉你一点,比如说有1000个客户端打开TcpClient连接到服务器,并且经常访问服务器处理业务信息,服务器端也只需要占用 1 个端口、几十个线程而已。更多的,看来没有必要说了。