解决方案 »
- 新手学线程,第一个例子就不懂,求帮助
- C#.net在mvc2.0下的后台跳转问题
- 求教,调用动态库中函数,C#中申明该怎样写?
- 如何生成安装文件(例如setup.exe)
- c# 中用dircetx绘制球体
- Access操作问题-新人求助
- 用C#连接PLC连接不上 提示远程主机关闭了一个进程
- 像 CSDN 这样,选择<插入源代码>后, 相应的源代码会显示相关的颜色. 这样的功能是怎么做到的呢.
- 请问在带有框架的页面中点击button按钮怎么在已有的框架中打开一个新的页面,这个页面是一个独立的页面
- 也挺难!
- 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用来发送, 发送和接收都是异步的,链路不知道什么时候会被关闭