Esempio n. 1
0
 //心跳检测,检测是否保持链接
 static void keepAlive()
 {
     while (true)
     {
         Dictionary <string, Socket> .ValueCollection items = clientConnectionItems.Values;
         //遍历值的集合
         foreach (Socket socketServer in items)
         {
             //创建一个内存缓冲区,其大小为1024*1024字节  即1M
             byte[] arrServerRecMsg = new byte[1024];
             //将接收到的信息存入到内存缓冲区,并返回其字节数组的长度
             try
             {
                 NetModel result = new NetModel()
                 {
                     ID = 0
                 };
                 socketServer.Send(Serialize <NetModel>(result));
             }
             catch (Exception ex)
             {
                 clientConnectionItems.Remove(socketServer.RemoteEndPoint.ToString());
                 //提示套接字监听异常
                 Console.WriteLine("客户端" + socketServer.RemoteEndPoint + "已经中断连接" + "\r\n" + ex.Message + "\r\n" + ex.StackTrace + "\r\n");
                 //关闭之前accept出来的和客户端进行通信的套接字
                 socketServer.Close();
                 break;
             }
         }
         //
         Thread.Sleep(60000);
     }
 }
Esempio n. 2
0
        /// <summary>
        /// 接收客户端发来的信息,客户端套接字对象
        /// </summary>
        /// <param name="socketclientpara"></param>
        static void recv(object socketclientpara)
        {
            Socket socketServer = socketclientpara as Socket;
            int    i            = 0;

            while (true)
            {
                //创建一个内存缓冲区,其大小为512字节
                byte[] arrServerRecMsg = new byte[512];
                //将接收到的信息存入到内存缓冲区,并返回其字节数组的长度
                try
                {
                    int length = socketServer.Receive(arrServerRecMsg);

                    NetModel result = DeSerialize <NetModel>(arrServerRecMsg, length);
                    Console.WriteLine(result.Message);


                    Console.WriteLine("客户端:" + socketServer.RemoteEndPoint + ",time:" + GetCurrentTime() + "\r\n" + result.Message + "\r\n\n");
                    result.Message = result.Message + i++;
                    socketServer.Send(Serialize <NetModel>(result));
                }
                catch (Exception ex)
                {
                    clientConnectionItems.Remove(socketServer.RemoteEndPoint.ToString());
                    //提示套接字监听异常
                    Console.WriteLine("客户端" + socketServer.RemoteEndPoint + "已经中断连接" + "\r\n" + ex.Message + "\r\n" + ex.StackTrace + "\r\n");
                    //关闭之前accept出来的和客户端进行通信的套接字
                    socketServer.Close();
                    break;
                }
            }
        }