首页 新闻 搜索 专区 学院

套接字异步读取消息是一个递归调用,这样不会造成内存耗尽或者说超过递归深度吗

0
[已解决问题] 解决于 2015-03-09 17:12
socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage),socket);
public static void ReceiveMessage(IAsyncResult ar)
        {
            try
            {
                var socket = ar.AsyncState as Socket;

                //方法参考:http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socket.endreceive.aspx
                var length = socket.EndReceive(ar);
                //读取出来消息内容
                var message = Encoding.Unicode.GetString(buffer, 0, length);
                //显示消息
                Console.WriteLine(message);

                //接收下一个消息(因为这是一个递归的调用,所以这样就可以一直接收消息了)
                socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), socket);
            }
            catch(Exception ex){
                Console.WriteLine(ex.Message);
            }
        }
大芝麻的主页 大芝麻 | 初学一级 | 园豆:4
提问于:2015-03-08 20:31
< >
分享
最佳答案
0

个人理解,不会形成线程套嵌的,比如一开始,主线程执行第一行代码后,就直接执行下一行了,至于异步返回的方法就是另一个线程执行了,你可以执行一下方法试试看,你在每个方法里consolo.write出来当前执行的线程名称,就明白了

奖励园豆:5
代码小兵的成长 | 菜鸟二级 |园豆:303 | 2015-03-09 14:13

真心谢谢。。。。。

大芝麻 | 园豆:4 (初学一级) | 2015-03-09 17:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册