我用socket写了一个服务端和客户端  当多客户端连进来后 其中一个或者多个突然关闭了自己的客户端 问:那么我服务端怎么知道这个客户端的连接已经不存在了?而且要关闭掉它

解决方案 »

  1.   

    receive(){
                               try
    {
                                        ... //这是接收数据的代码
    }
    catch (System.Net.Sockets.SocketException  e)
    {
                                    ... //如果客户端主动关闭了,会执行这里
    }

    catch( Exception e )
    {
                                    ...
    }
    }
    记得接收数据应另开一个新线程来操作.
      

  2.   

    还在吗 给我看看这个代码 :
    我新起一个线程来执行这里的接受数据:但是我的CPU100% 不知道怎么回事private void ThreadProc() 

    if(mySocket.Connected) 

    statusBar1.Text="与客户建立连接."; 
    while(true) 

    Byte[] ByteRecv=new Byte[256]; 
    mySocket.Receive(ByteRecv,ByteRecv.Length,0); 
    string strRecv=Encoding.BigEndianUnicode.GetString(ByteRecv); 
    rtbReceive.AppendText(strRecv+"\r\n"); 


      

  3.   

    Thread thread=new Thread(new ThreadStart(ThreadProc)); 
    thread.Start();
      

  4.   

    通过服务器不断地发心跳包来判断客户断是否断掉.
    我以前写socket时,发现客户端用任务管理器直接结果进程,服务器断会收不到客户端中断事件的.
      

  5.   

    if(mySocket.Connected) 
      //这句话有问题,你的mySocket是服务器端负责监听的socket吧!
    Socket newSocket=mySocket.Accept()  这里返回一个新的socket,这个新Socket才是用来send和receive用的
      

  6.   

    服务端:using System.Net;
    using System.Net.Sockets;
    using System.Text;
    using System.Threading;                  Thread mythread ;
             Socket socket;
               public static IPAddress GetServerIP()
             {
                  IPHostEntry ieh=Dns.GetHostByName(Dns.GetHostName());
                  return ieh.AddressList[0];
             }         private void BeginListen()
             {
                  IPAddress ServerIp=GetServerIP();
                  IPEndPoint iep=new IPEndPoint(ServerIp,8000);
                  socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);                          byte[] byteMessage=new byte[100];  
                  this.label1.Text=iep.ToString();
                  socket.Bind(iep);                while(true)
                  {
                      try
                       {
                           socket.Listen(5);                       Socket newSocket=socket.Accept();
                           newSocket.Receive(byteMessage);
                           string sTime = DateTime.Now.ToShortTimeString ( ) ;
                           string msg=sTime+":"+"Message from:";
                           msg+=newSocket.RemoteEndPoint.ToString()+Encoding.Default.GetString(byteMessage);
                           this.listBox1.Items.Add(msg);
                                              }                   catch(SocketException ex)                   {                       this.label1.Text+=ex.ToString();                   }              }//            while(byteMessage!=null);         }         //开始监听         private void button1_Click(object sender, System.EventArgs e)         {              try              {                   mythread = new Thread(new ThreadStart(BeginListen));                   mythread.Start();               }              catch(System.Exception er)              {                   MessageBox.Show(er.Message,"完成",MessageBoxButtons.OK,MessageBoxIcon.Stop);              }                     }
    你可以参考这个代码