解决方案 »
- WPF开发中设置Effect属性导致程序崩溃
- WinForm中的CheckedListBox禁用某项
- 取数据求教
- 请问如何读取xml文件中的属性值?????
- C#能不能访问Delphi中的RecordSet数据集?》??????
- 求正则表达式,达人高抬贵手看一下。
- 分享.NET全套视频教程下载
- 哪里好的c++到c#过渡的教程啊?
- 在webform中的datagrid的按钮列中的选择列为pushbutton时为什么不能选择而LinkButton是可以的?
- mainmenu,menuitem的背景色和字體顏色
- C# DataGridView 数据填充问题
- Navicat for SQL 的查询分析器可以调用,程序MySqlCommand调用失败 这是一个坑吗???
Dictionary<string, Socket> Client = new Dictionary<string, Socket>();
private void button1_Click(object sender, EventArgs e)
{
try
{
server = new Server(textBox1.Text, int.Parse(textBox2.Text), 100, 1024);
server.Connection = new BeginConnection(Con);
server.Receive = new BeginReceive(Rec);
server.Close = new BeginClose(Clo);
server.Start();
Write("已监听");
}
catch (Exception ex)
{
Write(ex.Message);
}
}
bool Con(SocketAsyncEventArgs ar)
{
var m = SuperSocket.SocketHelper.GetConnectionObject(ar);
Write(m.Key + "连接");
AddItem(m.Key);
Client.Add(m.Key, m.Value);
ar.UserToken = null;
return true;
}
void Rec(byte[] data, SocketAsyncEventArgs ar)
{
var m = SuperSocket.SocketHelper.GetConnectionObject(ar, data);
Write(m.Key + "发送数据:" + m.DataString);
}
void Clo(SocketAsyncEventArgs ar)
{
var m = SuperSocket.SocketHelper.GetConnectionObject(ar);
Write(m.Key + "断开");
RemoveItem(m.Key);
ar.UserToken = null;
ar.AcceptSocket.Shutdown(SocketShutdown.Both);
ar.AcceptSocket.Close();
ar.AcceptSocket.Dispose();
}
我知道是跨域,我的socket代码比较多就不贴出来了,我只定位到,大概是关闭socket和发送 回调时冲突报的错,因为是异步嘛,我每个链路只分配2个SocketAsyncEventArgs串行来 接收-处理-接收-处理 这样的机制,处理完了再接收。另一个SocketAsyncEventArgs用来发送, 发送和接收都是异步的,链路不知道什么时候会被关闭