首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

socket 缓冲区接收一定量数据以后 怎么复位

2012-12-14 
socket 缓冲区接收一定量数据以后 如何复位使C#做个小聊天工具使用 socket 套接字实现异步接收,在进行接收

socket 缓冲区接收一定量数据以后 如何复位
使C#做个小聊天工具
使用 socket 套接字实现异步接收,在进行接收图片时,因为图片没有压缩,直接已byte[]数组传送过来接收的
部分代码如下:

C# code
private Socket LocalSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);private int size = 1024*64;private Thread ListenThread;private byte[] bytData;        /// <summary>        /// 监听方法,用于监听远程发送到本机的信息        /// </summary>        public void Listen()        {            ListenThread = new Thread(new ThreadStart(VideoListen));            ListenThread.Start();        }        /// <summary>        /// 监听线程        /// </summary>        private void VideoListen()        {            bytData = new byte[size]            while (true)            {                LocalSocket.BeginReceiveFrom(bytData, 0, bytData.Length, SocketFlags.None, ref ipeRemote, new AsyncCallback(ReceiveVideo), LocalSocket);            }        }        /// <summary>        /// 接收数据        /// </summary>        /// <param name="iar"></param>        private void ReceiveVideo(IAsyncResult iar)        {            int intRecv = 0;            try            {                intRecv = LocalSocket.EndReceiveFrom(iar, ref ipeRemote);            }            catch            {                //throw new Exception();            }第二次执行到LocalSocket.BeginReceiveFrom(bytData, 0, bytData.Length, SocketFlags.None, ref ipeRemote, new AsyncCallback(ReceiveVideo), LocalSocket);

出现"未处理的SocketException"异常"由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作"。
这个异常怎么处理啊? 由于socket 的在接收数据时,需要给其分配个缓冲区,这里的缓冲区是 1024*64 就是64K大小(就算改大点,我改到1000000以后同样会报出这个异常,执行receive以后byte[]数组再清空已经和socket的缓冲区无关了),由于socket是在死循环中,所以socket的缓冲区没有被复位,所以再接收信息的时候,就是在刚才接受到得数据的缓冲区后再接收数据。
何如能吧receive的缓冲区给手动复位呢?

热点排行