// 处理上传文件请求 public static void RecvUploadFile(SocketAsyncEventArgs e, Packet fp, ref bool IsSend) { AsyncUserToken token = (AsyncUserToken)e.UserToken; if (null == token.Param) { UploadFilePacketProParam param = new UploadFilePacketProParam(); token.Param = param; ((PacketUploadFile)fp).ParseToParam(param); IsSend = false; } else { UploadFilePacketProParam param = (UploadFilePacketProParam)token.Param; param.dt.Write(e.Buffer, e.Offset, e.BytesTransferred); if (param.dt.Length >= param.FileLen) { param.dt.Close(); param.dt = null; int nResult = 1; PacketInsertORUpdateAck ack = new PacketInsertORUpdateAck(); ack.CreatePIUAckPacket(nResult); fp.PacketToBuf(e.Buffer, e.Offset); e.SetBuffer(e.Offset, ack.GetPacketLen()); //IsSend = true; } else { IsSend = false; } } }
public void ParseToParam(UploadFilePacketProParam param) { string strReq = DataToString(); if (strReq.Length > 0) { param.ActionCode = ActionCode; // 取出分割符(放在字符串的最后位置) char cSplit = strReq[strReq.Length - 1]; // 第一个字段是文件名 // 第二个字段是文件长度 string[] arr = strReq.Split(cSplit); param.FileLen = Convert.ToInt32(arr[1]); try { param.dt = new System.IO.FileStream(arr[0], System.IO.FileMode.Create); } catch (Exception e) { } } }