socket接收数据一定要写在一个死循环里吗?这样占用CPU太高了.有不有其他的什么方法? socket接收数据一定要写在一个死循环里吗?这样占用CPU太高了.有不有其他的什么方法?谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以在死循环中sleep,这样就会小很多。缓冲稍微大一点。 使用异步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 这是(二)http://www.jtzjsc.com.cn/46975.html IIS 浏览页面出现“/Web”应用程序中的服务器错误”。 webbrowser来做winform界面如何? 创意求助 求在C#中,使用command类对数据源执行插入、删除操作的代码 用C#写了一个二叉数. 求救!那位大哥能提供一份读写XML的公共类啊,小弟急用!在线等! 一个奇怪的关于类型转换的问题 关于查看本机安装的Framework版本的问题 C#winfrom怎么实现在线音乐播放器 欲学.net,如何切入 弱问socket发送Byte[]的问题 C#编写一个发邮件的程序
{
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();
}
需要例子给我邮箱
http://www.jtzjsc.com.cn/46959.html