socket接收数据一定要写在一个死循环里吗?这样占用CPU太高了.有不有其他的什么方法?谢谢

解决方案 »

  1.   

    可以在死循环中sleep,这样就会小很多。缓冲稍微大一点。
      

  2.   

    使用异步Socket模式,当收到数据或新连接时,有回调过程被调用,与事件类似。
      

  3.   

    private System.Threading.ManualResetEvent receiveEvent = new System.Threading.ManualResetEvent(false);        private void ReceiveData()
            {
                while (true)
                {
                    receiveEvent.Reset();
                    if (m_Socket != null && m_Socket.Connected)
                    {
                        StateObject stateObject = new StateObject();
                        stateObject.workSocket = m_Socket;
                        NetworkStream stream = new NetworkStream(m_Socket);
                        try
                        {
                            stream.BeginRead(stateObject.buffer, 0, MaxBuffer, new AsyncCallback(ReceiveData), stateObject);                    }
                        catch
                        {
                        }
                    }
                    receiveEvent.WaitOne();
                }
            }        private void ReceiveData(IAsyncResult ar)
            {
                receiveEvent.Set();
            }
      

  4.   

    将接收数据的过程交给其他线程处理,或者使用如 clawclaw(唏嘘的胡渣)  提供的异步接收方式。不使用while死循环!
      

  5.   

    用异步触发吧,不要用死循环,下面是人家的类,直接拷过来就能用的,测试过,
    需要例子给我邮箱
    http://www.jtzjsc.com.cn/46959.html
      

  6.   

    这是(二)http://www.jtzjsc.com.cn/46975.html