日期:2014-05-19  浏览次数:21099 次

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

------解决方案--------------------
使用异步Socket模式,当收到数据或新连接时,有回调过程被调用,与事件类似。
------解决方案--------------------
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();
}
------解决方案--------------------
将接收数据的过程交给其他线程处理,或者使用如 clawclaw(唏嘘的胡渣) 提供的异步接收方式。不使用while死循环!
------解决方案--------------------
用异步触发吧,不要用死循环,下面是人家的类,直接拷过来就能用的,测试过,
需要例子给我邮箱
http://www.jtzjsc.com.cn/46959.html