/// <summary> /// 关闭一个与客户端之间的会话 /// </summary> /// <param name="state">需要关闭的客户端会话对象</param> public void Close(AsyncSocketState state) { //if (state != null && state.ClientSocket.Connected == false) if(state != null) { state.Datagram = null; state.RecvDataBuffer = null; this.m_clientList.Remove(state); this.m_currClientCount--; IPEndPoint ip = (IPEndPoint)state.ClientIp; Console.WriteLine("客户端终止,关闭了客户端{0}:{1}, 当前连接的客户端数目{2}", ip.Address, ip.Port, this.m_currClientCount); this.Log.Write(new LogMessage("客户端终止,关闭了客户端, 当前连接的客户端数目" + this.m_currClientCount, LogMessageType.Error)); //TODO 触发关闭事件 state.Close(); //state = null; } }
private void RaiseUploadSigaturePicture(AsyncSocketState state) { Console.WriteLine("接收到来自" + state.ClientIp + "上传签字图片的请求" + state.SocketMessage.Message); this.Log.Write(new LogMessage("接收到来自" + state.ClientIp + "上传签字图片的请求" + state.SocketMessage.Message, LogMessageType.Information)); String employeeId = JsonConvert.DeserializeObject<String>(state.SocketMessage.Message); //ServerResponse response = new ServerResponse(); Console.WriteLine("开始上传签字图片"); //因为终端每次发送文件的最大缓冲区是512字节,所以每次接收也是定义为512字节 byte[] buffer = new byte[512]; int size = 0; long len = 0; string fileName = SIGNATURE_PICTURE_PATH + employeeId + ".jpg";//获得用户保存文件的路径 try { //创建文件流,然后让文件流来根据路径创建一个文件 FileStream fs = new FileStream(fileName, FileMode.Create); //从终端不停的接受数据,然后写入文件里面,只到接受到的数据为0为止,则中断连接 while ((size = state.ClientSocket.Receive(buffer, 0, buffer.Length, SocketFlags.None)) > 0) { // Console.WriteLine(Encoding.UTF8.GetString(buffer)); fs.Write(buffer, 0, size); len += size; } fs.Flush(); Console.WriteLine("上传签字图片成功"); } catch(Exception ex) { state.Close(); Console.WriteLine(ex.ToString()); } }