服务器采取异步监听方式,如果有新连的,产生新连接
问题出来了,如果手动关闭,会产生错误:
Cannot access a disposed object.
Object name: 'System.Net.Sockets.Socket'.我的想法是怀疑是由于没有关闭监听。可是发现自己不会关…………请教各位,急用,谢谢!!有关代码如下例private void Form1_Load(object sender, EventArgs e)
{
SocketListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipLocal = new IPEndPoint(IPAddress.Any, 8080);
SocketListener.Bind(ipLocal);
SocketListener.Listen(100);
SocketListener.BeginAccept(new AsyncCallback(OnClientConnect), SocketListener);
}private void OnClientConnect(IAsyncResult asyn)
{
Socket SocketListener = (Socket)asyn.AsyncState;
NewConnection(SocketListener.EndAccept(asyn));
SocketListener.BeginAccept(new AsyncCallback(OnClientConnect), SocketListener);
}private void button1_Click(object sender, EventArgs e)
{
if (SocketListener != null)
{
SocketListener.Close();
}
}请教各位高手,如果我想的没有使用EndAccept关闭,而导致的错误,那么如何使用,才不出现错误信息如果不是因为EndAccept的问题,那为什么会报错呢?谢谢谢谢!!!
问题出来了,如果手动关闭,会产生错误:
Cannot access a disposed object.
Object name: 'System.Net.Sockets.Socket'.我的想法是怀疑是由于没有关闭监听。可是发现自己不会关…………请教各位,急用,谢谢!!有关代码如下例private void Form1_Load(object sender, EventArgs e)
{
SocketListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipLocal = new IPEndPoint(IPAddress.Any, 8080);
SocketListener.Bind(ipLocal);
SocketListener.Listen(100);
SocketListener.BeginAccept(new AsyncCallback(OnClientConnect), SocketListener);
}private void OnClientConnect(IAsyncResult asyn)
{
Socket SocketListener = (Socket)asyn.AsyncState;
NewConnection(SocketListener.EndAccept(asyn));
SocketListener.BeginAccept(new AsyncCallback(OnClientConnect), SocketListener);
}private void button1_Click(object sender, EventArgs e)
{
if (SocketListener != null)
{
SocketListener.Close();
}
}请教各位高手,如果我想的没有使用EndAccept关闭,而导致的错误,那么如何使用,才不出现错误信息如果不是因为EndAccept的问题,那为什么会报错呢?谢谢谢谢!!!
解决方案 »
- 已知有一个用补码表示的数,如何用C#求出它的原码?
- 从软件需求分析到代码实现、测试,请问VS2010可以满足吗?
- 如何把gridview中的数据导入到sql server数据库的数据表中保存?注意这里与excel没有任何关系!
- C# 程序在 Pocket PC 上播放声音的问题.
- DATAGRIDVIEW数据格式问题
- 对数组进行分段读取的问题?急!急!急!!!(在线等)
- C#中退出过程
- smartclient 请教高手
- 快递api
- Clr20r3 程序错误
- 我想从A.aspx,提交到B.aspx时,出问题了!
- 如何在主窗口中把dataGrid.visible=false,然后在子窗体中的button的单击事件里再把他显示
{
//异步回调接受连接请求
try
{
allDone.Set();
Socket a_socket = (Socket)ar.AsyncState;
Socket handle = a_socket.EndAccept(ar);
socketaccepted(handle);
//进行异步接收数据
handle.BeginReceive(received, 0, received.Length, SocketFlags.None, new AsyncCallback(AsyncReceive), handle);
}
catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
“Cannot access a disposed object.Object name: 'System.Net.Sockets.Socket'.”所以我想在private void button1_Click(object sender, EventArgs e)方法里,怎么弄加代码,把socket关闭监听状态,然后再close不知道哪位高人能指教1234啊~~谢谢谢谢!!!分如果不够,我可以再加!真的感谢每一位的帮助!!
{
if (SocketListener != null)
{
SocketListener.Close();
}
}
楼主注意下SocketListener负责监听,但不产生连接,真正的连接是后面的
NewConnection(SocketListener.EndAccept(asyn));
==========================================
同时SocketListener != null不为空并不表示SocketListener 已经建立了一个连接
SocketListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);这句就已经使SocketListener 不为空了。
// Signal the main thread to continue.
allDone.Set(); // Get the socket that handles the client request.
Socket listener = (Socket) ar.AsyncState;
Socket handler = listener.EndAccept(ar); // Create the state object.
StateObject state = new StateObject();
state.workSocket = handler;
handler.BeginReceive( state.buffer, 0, StateObject.BufferSize, 0,
new AsyncCallback(ReadCallback), state);
}关闭的时候
handler.Shutdown(SocketShutdown.Both);
handler.Close();明白了吗?关闭的不是那个listener
SocketListener.Close()会导致Cannot access a disposed object我想关闭SocketListener的监听状态,不知道如何处理呢
而Socket listener = (Socket) ar.AsyncState
是地址传递,仍然是原来的listener ,还处于监听状态
到这我说的对吗?如果开始后,并没有任何连接请求,及不会产生任何handler ,那就用不到Shutdown
而只要关闭监听了……