作者kojilin (呵呵呵噗噗噗..搞笑..)
看板C_Sharp
标题Re: [问题] 用Thread来写一个udp server?
时间Fri Jun 17 11:32:48 2005
※ 引述《unused (dealinfo.blogspot.com)》之铭言:
: ※ 引述《tomex (tomex_ou)》之铭言:
: : 应该没问题呀!
: : 建议使用非同步方法,这样就不用一直控制thread
: : 它自动会call back而开启新的thread.
: 啊..我应该讲清楚一点
: 我现在需要一个server,每次有client进来的时候,
: server&client之间会先用udp做一个handshake,
: handshake成功後server&client会建立一个tcp connection.
: 所以我想要每个client一开始用送udp封包时,
: server就开一个thread,专门处理这个client的handshake跟之後的tcp连线..
: callback可以做到这样吗?
: 之前纯tcp server时我可以直接这样
: client = new TcpListener(port);
: client.start;
: while(true)
: {
: blah blah 开一个thread
: }
: 现在就是想要用udp这样做...
其实这应该只是流程设计上的问题
如果依照你的需求去做
我会用统一的入口先去收资料,
一个主UDPClient去收,因为UDPClient我记得可以建构时绑port
然後udp.Receive(ref remoteEP);
可以取得送来的对方资讯,
你就把对方资讯记录起来,产生一个新port,用资料结构去mapping一下
譬如192.168.1.10连进来,我现在开个13000给他用.
通知client下次送改送13000 port..
接着就是开新thread,每个thread都负责产生的port
,一个port一个client作handshake
所以新的thread内开一个UDPClient(13000),负责与192.168.1.10沟通
然後建立tcp连线也在这边完成
我是不太推荐asynchronous sockets,因为会稍微难一点点..
这种简单的应用靠High-level的TCPListener,TCPClient,UDPClient就够了
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.138.19.58
1F:推 unused:大感谢,这样我就比较知道了. Thx a lot!! :D 207.109.29.39 06/17
2F:推 tomex:我当初学非同步,看了1星期有看没有懂,後来通了.. 60.248.89.46 06/17
3F:推 cplusplus:一星期 @@ 没有好的文件可看? 140.115.205.46 06/17