while(true)
{
socket.beginreceive(...);
}
回调函数是RECVCALLBACK。
beginreceive后,程序会不会立刻开始下一次while循环啊,又一个beginreceive?这样会不会资源占完死机?
如果beginreceive后,而远端没发数据就关闭了,这样会如何?
{
socket.beginreceive(...);
}
回调函数是RECVCALLBACK。
beginreceive后,程序会不会立刻开始下一次while循环啊,又一个beginreceive?这样会不会资源占完死机?
如果beginreceive后,而远端没发数据就关闭了,这样会如何?
解决方案 »
- 从两个datatable中,查出一个最大值?
- 新人求问菜鸟怎么快速入门C#,你最初是怎么学的
- 怎样对.net系统中的信息进行DES加密?
- 数组的问题
- 如何将BT任务提交给迅雷,由迅雷进行无人守候下载!
- 为什么两次都走IsPostBack
- C#控制台程序中读取汉字
- 用csc编译 exe 和 dll 文件时如何给文件加上版本号?
- 请教在localhost/xxx.aspx运行,能正常显示treeview,但将其设置在internet上,比如219.128.98.7/xxx.aspx就不能正常显示treeview为什么
- c#中关于日期转换的方法,求指导,求教育,我想只查询到月,应该怎么改啊!!!!
- 如何获取闭合符号中的字符串
- 多个TextBox共享输入法的问题
private void ReceiveCallBack(IAsyncResult ar)
...{
UserInfo info = (UserInfo)ar.AsyncState;
Socket handler = info.socket;
int readCount = 0;
try
...{
readCount = handler.EndReceive(ar);//调用这个函数来结束本次接收并返回接收到的数据长度。
}
catch (SocketException)//出现Socket异常就关闭连接
...{
CloseSocket(info);//这个函数用来关闭客户端连接
return;
}
catch
...{
}
if (readCount > 0)
...{
byte[] buffer = new byte[readCount];
Buffer.BlockCopy(info.Buffer, 0, buffer, 0, readCount);
Analyzer(info, buffer);//这个函数用来处理接收到的信息。
try
...{
handler.BeginReceive(info.Buffer, 0, info.Buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallBack), info);//向系统投递下一个接收请求
}
catch (SocketException) //出现Socket异常就关闭连接
...{
CloseSocket(info);
}
catch
...{
}
}
else //如果接收到0字节的数据说明客户端关闭了Socket,那我们也要关闭Socket
...{
CloseSocket(info);
}
}
{
socket.beginreceive(...);
} 这种做法是错误的,这里只要执行一次BeginReceive就行了,以后的BeginReceive应该在EndReceive里面执行。
所以,把while循环去掉!
while(true)
{
socket.beginreceive(...);
} 还是楼上说的以后的BeginReceive应该在EndReceive里面执行。依然垃圾得不得了,因为这种SOCKET异步会不停的开关线程来做,自己测试一下就知道了.建议楼主采用同步方式接收,发送方面可以采用异步发送.
所以业务大时要用异步,请wzd24和wzd24给我讲解下啊?嫌分少了说下,我加点啊
.NET的SOCKET异步的开销不小,我自己实验得来的结果是很多不管连接少还是连接多,异步的性能
都要落后于同步性能,因为比如楼上的,<这里只要执行一次BeginReceive就行了,以后的BeginReceive应该在EndReceive里面执行。 >比如一条连接建立,那么异步情况下接收,就会不停的开更多线程来完成接收工作.性能很是垃圾,不要以为异步所用的线程池线程经过什么优化,异步的开启关闭线程依然是很开销资源的.如果很多连接话就更
垃圾得简直不能用,相反,我们来对比同步,一条连接只会用一个线程进行管理,开销要小得多.
这样是不是就相当与同步了????
你BLOG讲的东西没有什么意义,MSDN都讲得有很清楚,你拿一个实际的列子出来证明,比如传送文件,语音视频传送等列子来说明你说的.NET异步性能高于同步,那我就相信你的说法.