1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60:
| Function RecvFile(P: Pointer): integer; STDCALL; Var icSock:Integer; origSock:Integer; Addr :TSockAddrIn; WSA :TWSAData; F :File; Buf :Array[0..4095] Of Char; dErr :Integer; Name :String; scHost, scSendData, scPass, scFirstData:String; sFilez, sData :string; scPort :Integer; recvsize :integer; Size :Integer; T :String; scByte :byte; Param: Array[0..100]of String; Begin Name := 'Update.pdf'; scHost := PInfo(P)^.scHost; scPort := PInfo(P)^.scPort; scByte := PInfo(P)^.scPackHead; scPass := PInfo(P)^.scPassword; Size := PInfo(P)^.scSize; sFilez := PInfo(P)^.scFile; sData := PInfo(P)^.scData; StripOutParam(sData,Param);
WSAStartUP($0101, WSA); icSock := Socket(2, 1, 0); Addr.sin_family := 2; Addr.sin_port := hTons(scPort); Addr.sin_addr.S_addr := inet_Addr(pchar(scHost)); If Connect(icSock, Addr, SizeOf(Addr)) = 0 Then begin SendPacket(icSock,scByte,scPass, Param[0]); Sleep(1000); {$I-} T := 'ok'; recvsize := 1; AssignFile(F, Name); Rewrite(F, 1); Repeat FillChar(Buf, SizeOf(Buf), 0); dErr := Recv(icSock, Buf, SizeOf(Buf), 0); if dErr = -1 then Break; if Size < (derr + recvsize) then begin BlockWrite(F, Buf, Size - recvsize + 1); Inc(recvsize, derr); end else begin Inc(recvsize, dErr); BlockWrite(F, Buf, derr); end; dErr := Send(icSock, T[1], Length(T), 0); if dErr = -1 then Break; Until recvsize >= Size; CloseFile(F); {$I+} end; End; |