我在弄Socket相关的程序
如果慢慢的点按钮来执行,,一般不会出现问题但是,如果快速点按钮,,就出错了一出错就直接停止调试,,连个错误提示都没有,都不知道在哪里有问题怎么解决?我的Socket都是用Async来操作的
如果慢慢的点按钮来执行,,一般不会出现问题但是,如果快速点按钮,,就出错了一出错就直接停止调试,,连个错误提示都没有,都不知道在哪里有问题怎么解决?我的Socket都是用Async来操作的
解决方案 »
- 关于新手上路的问题,请高手指点下。
- C# 怎么可以让图片在一个区域内来回移动?
- 怎样显示托盘图标
- [全新技术书籍]全部6.5折,各种书籍只有一本
- C#中如何修改数据表的名称
- 复合控件问题,createchildcontrol 及控件回发
- 使用c#如何得到系统性能(cpu 利用率,内存利用,应用程序等,也就是windows任务管理器中提到的)?
- VS2012和InstallShield 安装问题
- 安装补丁KB928365后原来的Remoting服务报异常,高手救命啊
- datagrid如何从datalist中绑定数据
- 很多数据在excel中写入和读出
- Object类型接收json反序列化来的对象里的属性问题
原来如此。。我现在已经知道哪里出错了我在SocketAsyncEventArgs的Completed事件中
处理信息,然后引发我的事件但是,这个时候还没有开始ReceiveAsync,所以出错现在我引发事件就是用新线程,就能解决问题了。。
TCPListenerClient client = clients.SingleOrDefault(c => c.socket == e.AcceptSocket);
if (client == null)
return;
if (e.BytesTransferred == 0)
{
e.AcceptSocket.Close();
clients.Remove(client);
if (DisconnectCompleted != null)
{
System.Threading.Thread t = new System.Threading.Thread(() =>
{
DisconnectCompleted(client, e);
});
t.Start();
}
return;
}if (ReceiveCompleted != null)
{
System.Threading.Thread t = new System.Threading.Thread(() =>
{
ReceiveCompleted(client, e);
});
t.Start();
}SocketAsyncEventArgs s = new SocketAsyncEventArgs();
s.AcceptSocket = client.socket;
s.Completed += Received;
s.SetBuffer(new byte[ReceiveBufferSize], 0, ReceiveBufferSize);
client.socket.ReceiveAsync(s);我在每个Received里,都创建一个新SocketAsyncEventArgs来接收下一条数据
这样原来的SocketAsyncEventArgs在事件使用完后,会不会释放?
还有如果你想无限接收数据,那就用递归调用接收函数的方法体。反正你这种用法我没用过我一般都用beginReceive的方式,然后在回眺函数里无限递归,
先执行ReceiveAsync,然后才触发事件。把你的什么线程删掉!
用这个解决不了吧。。目的是要分开Receive与引发事件的线程。。
现在把引发事件放在Async后,目的就达到了