关于Socket 异步读取的小疑点,有关问题解决立即给分
关于Socket 异步读取的小问题,在线等,问题解决立即给分
先贴下源码
出错位置在源码标记的位置报IO异常,我把recByte new成20000长度的就不会报异常了,请问这是什么原因,求教了
------解决方案--------------------
很明显,缓冲区不够了溢出报异常。底层收包可能是每次收1024个字节,但是一次完整包补一定是1024可以存下,如果返回是1025字节,而你给出的缓冲区是1024,就会溢出异常。
------解决方案--------------------
原因:WSABUF数据结构没有初始化!使用new来分配的,没有调用缺省的构造函数来初始化,所以导致这一问题。
------解决方案--------------------
http://blog.****.net/qiuqingpo/archive/2010/04/02/5445808.aspx
先贴下源码
- C# code
public static ManualResetEvent HallallDone = new ManualResetEvent(false); byte[] recByte = new byte[1024]; private TcpClient hallclient; private void readhallclient() { HallallDone.WaitOne(); AsyncCallback GetStreamMsgCallback = new AsyncCallback(hallReadCallBack); hallclient.GetStream().BeginRead(recByte, 0, recByte.Length, GetStreamMsgCallback, null); //出错的位置,报IO异常:无法从传输连接中读取数据: 由于系统缓冲区空间不足或列队已满,不能执行套接字上的操作。。 readhallclient(); } private void hallReadCallBack(IAsyncResult ar) { int numberOfBytesRead; bool isFinish = true; try { lock ( hallclient.GetStream()) { numberOfBytesRead = hallclient.GetStream().EndRead(ar); if (numberOfBytesRead < 1) { Console.WriteLine("消息长度小于1----Player"); return; } } sb.AddBytes(recByte, numberOfBytesRead); recByte = new byte[1024]; if (hallclient.GetStream().DataAvailable) { isFinish = false; hallclient.GetStream().BeginRead(recByte, 0, recByte.Length, new AsyncCallback(hallReadCallBack), hallclient.GetStream()); } if (isFinish) { string msg = StrHelper.ascarr2str(sb.ReceiveAllByte); msg = msg.TrimEnd('\0'); string result = listenedMsgEffect(msg,CodeControl.LocalCode.Localcode); if (result!=null&&result != "") { writehallclient(result); } sb.Dispose(); } } catch (Exception ex) { Console.WriteLine(ex.Message); } }
出错位置在源码标记的位置报IO异常,我把recByte new成20000长度的就不会报异常了,请问这是什么原因,求教了
------解决方案--------------------
很明显,缓冲区不够了溢出报异常。底层收包可能是每次收1024个字节,但是一次完整包补一定是1024可以存下,如果返回是1025字节,而你给出的缓冲区是1024,就会溢出异常。
------解决方案--------------------
原因:WSABUF数据结构没有初始化!使用new来分配的,没有调用缺省的构造函数来初始化,所以导致这一问题。
------解决方案--------------------
http://blog.****.net/qiuqingpo/archive/2010/04/02/5445808.aspx