private void ReceiveFiles() { SocketTalker socketTalker = new SocketTalker(mConnector.Socket); FileInfo fileInfo = null; FileStream fileStream = null; try { while (true) { string name = socketTalker.ReceiveString(); if (name == " ") { break; } LogEvent("正在接收 " + name + " ..."); string status = socketTalker.ReceiveString(); if (status == "OK") { string path = Path.Combine(ContainerPath, name); string dir = Path.GetDirectoryName(path); Directory.CreateDirectory(dir); fileInfo = new FileInfo(path); fileStream = fileInfo.OpenWrite(); long length = socketTalker.ReceiveLong(); byte[] buffer = new byte[16 * 1024]; long received = 0; while (received != length) { long toReceive = length - received; if (toReceive < buffer.Length) { int count = socketTalker.Socket.Receive(buffer, (int)toReceive, SocketFlags.None); received += count; fileStream.Write(buffer, 0, count); } else { int count = socketTalker.Socket.Receive(buffer, buffer.Length, SocketFlags.None); received += count; fileStream.Write(buffer, 0, count); } } fileStream.Flush(); fileStream.Close(); } else { LogEvent("接收 " + name + " 失败,远程文件无法读取!"); } } LogEvent("接收完成。"); } catch { LogEvent("接收文件出错,数据可能不完整,请关闭窗口并重试。"); } finally { if (socketTalker != null) { socketTalker.Close(); } if (fileInfo != null) { fileInfo = null; } if (fileStream != null) { fileStream.Close(); } } }