日期:2014-05-17  浏览次数:20691 次

关于UDP多线程的问题?请懂的人进来看看,谢谢!
本人自学新手,最近想自己琢磨写一个dns服务器玩玩,但考虑到效率问题(虽然是玩玩,也要尽量完美),希望能用一个线程监听53端口,然后接到请求后分给其他线程处理,我想问问
1 其他线程还能用53端口发数据吗?
2 能多个线程同时用53端口发数据吗?
3 怎么分配接到的数据包达到均衡负载,是不是新接到一个请求就新建一个线程,直到达到设定的线程最大值接受线程就会阻塞,阻塞的时候会不会接不到请求
4 或者说发送线程可以不用53端口返回,不用53端口的话客户端会接受吗
5 我说的是udp,那如果是tcp可行吗
最好有核心代码示例,谢谢
UDP 多线程 DNS服务器

------解决方案--------------------
1.2.多个线程可以使用同一个socket  当然就是可以使用同一port
3.专门用一个线程接收数据(不分析也不处理),将接受来的数据放进一个待处理区,另开辟线程分析数据处理数据
4.同1.2
5.可以

建议先学习socket通讯
------解决方案--------------------

------解决方案--------------------
我没有任何经验,完成靠猜测~

1 其他线程还能用53端口发数据吗?
应该是先考虑进程,再线程;
一个服务器,如果有IIS和Tomcat,那么他们只能有一个使用80端口;

2 一个进程中的多个线程可以使用同一个端口

3 阻塞的时候就排队~~~

5 dns?域名解析么~ 还是用tcp吧~~~ udp是不可靠的,传输过程中丢包就丢包了~
比如本来是解析成192.168.0.101; 但传输丢了168则成为192.0.101了~

------解决方案--------------------
多线程就不能用tcp了,因为tpc要连接的一旦连接了端口就占用了,还是用udp虽然不可靠也不至于不稳定,通过程序的通信协议和校验一般来说是不会出差错的.
------解决方案--------------------
你直接使用线程池线程来管理线程了,你可以监听代码通过ThreadPool.QueueUserworkItem方法来让线程池线程执行监听代码