//心跳检测,检测是否保持链接 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); } }
/// <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; } } }