Re: winsock, TransmitFile
- From
- Andrew Ryazanov ()
- To
- Dmitry Kalinin ()
- Date
- 2001-10-22T21:50:04Z
- Area
- SU.WINDOWS.NT.PROG
From: "Andrew Ryazanov" <rash@land.ru>
Dmitry Kalinin <Dmitry.Kalinin@p43.f5.n5009.z2.fidonet.org> wrote in
article <1003767122@p43.f5.n5009.z2.ftn>...
> Привет All!
>
> TransmitFile не работает под Win98, хотя под NT2000/4.0 работает без
> проблем. Как это исправить? Все это выполняется в потоке (Thread).
> { Открытие файла для отправки }
Никак. Написно же Requires Windows Sockets 1.1 or later. A
Microsoft-specific extension. Not supported on Windows 95.
Я в свое время обнаружив этот факт, просто написал эквивалент этой функции,
вот он:
(s - это сконнекченный TCP сокет, f - хендл файла)
function TransmitFile(s:TSocket;f:HFILE):BOOLEAN;
var i:DWord;
buf:array[1..1024] of byte;
readed,trail,fsize:DWord;
begin
Result:=true;
SetFilePointer(f,0,NIL,FILE_BEGIN);
fsize:=GetFileSize(f,NIL);
for i:=1 to trunc(fsize/Sizeof(buf)) do
begin
ZeroMemory(@buf,sizeof(buf));
ReadFile(f,buf,sizeof(buf),readed,NIL);
if winsock.send(s,buf,sizeof(buf),0)=SOCKET_ERROR then
begin
result:=false;
exit;
end;
end;
{И хвост}
if (trunc(fsize/Sizeof(buf))*sizeof(buf))<fsize then
begin
trail:=fsize-(trunc(fsize/Sizeof(buf))*sizeof(buf));
ZeroMemory(@buf,sizeof(buf));
ReadFile(f,buf,trail,readed,NIL);
if winsock.send(s,buf,trail,0)=SOCKET_ERROR then
begin
result:=false;
exit;
end;
end;
end;
--- ifmail v.2.15dev5
* Origin: Demos online service (2:5020/400)