启动按钮代码
serverThread = new Thread(new ThreadStart(StartListen));
serverThread.Start(); #region 开始监听端口
public void StartListen()
{
if(ListenSoc==null)
{
int nPort = Convert.ToInt32(port_textbox.Text);
IPEndPoint ipLocalEndPoint;
IPAddress ipAddress = IPAddress.Parse(serverIP.Text);
ipLocalEndPoint = new IPEndPoint(ipAddress, nPort); 
                                  try
{
ListenSoc = new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp );
ListenSoc.Bind(ipLocalEndPoint);
ListenSoc.Listen(10);
if(!LisStop) ListenSoc.BeginAccept(new AsyncCallback(AcceptCallback),null);
}
catch(Exception err) 
{
this.Close();
return;
}
}
}
我想断开所有连接到我的机子的机子,可是用shutdown和close不管用,怎么样断开呢

解决方案 »

  1.   

    很简单的
    ListenSoc.close()
    就可以了,快给分。
      

  2.   

    加个ListenSoc.Dispose()这个可以吗
      

  3.   

    我写的断开代码是
    if(ListenSoc.connected)
    判断结果竟然是false,可明明有连接的socket
      

  4.   

    你不妨把ListenSoc.connected的状态数出来看看
      

  5.   

    这是我的断开代码
    CloseSocket(ListenSoc);
    if(serverThread!=null) serverThread.Abort();
    ListenSoc=null;
    其中CloseSocket函数
    public void CloseSocket(Socket conn_Sock)
    {
    if(conn_Sock.Connected) conn_Sock.Shutdown(SocketShutdown.Both);
    conn_Sock.Close(); 
    }
    我判断if(conn_Sock.Connected)竟然为false;
      

  6.   

    serverThread
    这个线程能正常退出吗》?
      

  7.   

    传输完后加上:
    socket.Shutdown(SocketShutdown.Both);
    socket.Close();
      

  8.   

    恐怕线程会出错,我也遇到这个问题,如何安全的关闭线程和SOCKET。
      

  9.   


    System.Environment.Exit(0);
    Application.Exit
      

  10.   

    我只是断开 按钮,并不是退出按钮
    Application.Exit
    是不行的
      

  11.   

    Connected属性:获取一个值,该值指示 Socket 是否已连接到远程主机。所以,Server上的Connected为false,我想是这么回事。serverThread.Abort();
    socket.Shutdown(SocketShutdown.Both);
    socket.Close();
    应该关闭Socket了吧
      

  12.   

    根本无需判断是否连接if(conn_sock != null)
    {
        conn_sock.Shutdown();
        conn_sock.Close();
    }这样就可以了
      

  13.   

    我按你说的写的,根本不行,我是客户端上传文件过程中,断开服务器,可是一走到shutdown那,就出错,提示:
    “由于套接子没有连接并且(当使用一个sendto调用发送数据报套接子时)没有提供地址,发送或者接收数据的请求没有被接受“。
    客户端上传文件 没受到影响,直到传输完毕
      

  14.   

    建议你使用TcpChannel,这个又简单又方便!
      

  15.   

    我原来写的,不知道有可用的地方吗!
    private static void Listen()
    {
    isStop =false;
    // Set the TcpListener on port 13000.
    Int32 port = 1521;
    IPAddress localAddr = IPAddress.Parse("192.168.80.76"); // TcpListener server = new TcpListener(port);
    TcpListener server = new TcpListener(localAddr,port); // Start listening for client requests.
    server.Start(); // Buffer for reading data
    Byte[] cache = new Byte[256];

    // Enter the listening loop.
    while(!isStop) 
    {
    if(server.Pending())
    {
    Socket sok = server.AcceptSocket();            

    EndPoint ep= sok.RemoteEndPoint; sok.Bind(sok.LocalEndPoint); int i= sok.ReceiveFrom(cache,ref ep); data += System.Text.Encoding.UTF8.GetString(cache); sok.Close(); sok.Shutdown(SocketShutdown.Receive);
    }
    else
    {
    Thread.Sleep( 100 );
    }
    }

    server.Stop();

    }
      

  16.   

    看来你这个问题是socket没有连上啊,不信你传传数据
      

  17.   

    我就像知道如果我用socket监听之后,又想让机子停止监听,并且已经建立的socket连接都关掉,
    实现这个功能竟然这么难,没一个人会,其实这种情况经常遇到阿
      

  18.   

    conan19771130(失业中(无锡的有吗)) 
    你没看到 zmgcj(真的名贵) 的回答吗?
    它的回答是对的,
      

  19.   

    CSDN就有socket异步处理的完整例子,你搜索一下吧。
      

  20.   

    根本没有关闭监听socket,shutdown和close只能使以后要连接的客户端不能连接,但是却不能关闭已经连接的socket,我查过csdn了,到底谁知道呀
      

  21.   

    呵呵,楼主的问题还没解决啊。
    不知道你Server端的程序是不是这样的,每个客户端连上以后,在Server端都专门开一个线程处理该客户端的数据传输等等,在关socket时,这个线程还在继续活动,没有关掉。如果是这样的话,关闭socket时把这些线程也都强行退出,应该就行了。