none
Socket如何判断异步接受数据完成 RRS feed

  • 问题

  • public class StateObject
    {
        public const int BufferSize = 4;
        public byte[] buffer = new byte[BufferSize];
        public StringBuilder SB = new StringBuilder();
    }
    
    .....
    
    private Socket _Socket = null;
    _Socket = new Socket(AddressFamily.InterNetwork, 
            SocketType.Stream, ProtocolType.Tcp);
    _Socket.Bind(new IPEndPoint("127.0.0.1","2010"));
    
    ......
    StateObject so=new StateObject();
     _Socket.BeginReceive(so.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(Received), so);
    
        private void Received(IAsyncResult iar)
        {
          StateObject so = iar.AsyncState as StateObject;
          int read = _Socket.EndReceive(iar);
          //在这里如何判断数据接收完成了。
        //然后调用MessageBox.Show(so.SB.ToString());
          if (read > 0)
          {
            so.SB.Append(Encoding.Default.GetString(so.buffer));
            _Socket.BeginReceive(so.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(Received), so);
          }
          else
          {
            //MSDN里的示例代码是 当(read>0)==false时
          //表示接收了所有的数据,但我用断点测试
          //(read>0)==false永远不会出现。
            MessageBox.Show(so.SB.ToString());
          }
    
        }
    

    dog
    2010年12月23日 7:40

答案

  • 大家帮忙看看。着急啊。谢谢谢谢再谢谢
    dog


       int read = _Socket.EndReceive(iar);
    这句话基本是说  本线程等待到接收一个片段数据完了。

     

    所以不需要你知道, 只要在这句代码后  你都可以看作数据接收完了。

     

    如果您说的是 如何判断连接关闭,您只要判断read ==0就可以认为对方主动断开连接

     


    入了ipad,最近用ipad上论坛
    2011年3月11日 6:37
    版主

全部回复

  • 大家帮忙看看。着急啊。谢谢谢谢再谢谢
    dog
    2010年12月24日 0:39
  • 大家帮忙看看。着急啊。谢谢谢谢再谢谢
    dog


       int read = _Socket.EndReceive(iar);
    这句话基本是说  本线程等待到接收一个片段数据完了。

     

    所以不需要你知道, 只要在这句代码后  你都可以看作数据接收完了。

     

    如果您说的是 如何判断连接关闭,您只要判断read ==0就可以认为对方主动断开连接

     


    入了ipad,最近用ipad上论坛
    2011年3月11日 6:37
    版主