Re^2: winsock, TransmitFile

From
Dmitry Kalinin (2:5009/5.43)
To
Andrew Ryazanov ()
Date
2001-10-23T08:01:16Z
Area
SU.WINDOWS.NT.PROG
Привет Andrew!

22 Окт 01 21:50, Andrew Ryazanov -> Dmitry Kalinin:

 AR> From: "Andrew Ryazanov" <rash@land.ru>
 >>     TransmitFile не работает под Win98, хотя под NT2000/4.0 работает
 >> без проблем. Как это исправить? Все это выполняется в потоке
 >> (Thread).    { Открытие файла для отправки }
 AR> Никак. Написно же Requires Windows Sockets 1.1 or later. A
 AR> Microsoft-specific extension. Not supported on Windows 95.
 AR> Я в свое время обнаружив этот факт, просто написал эквивалент этой
 AR> функции, вот он: (s - это сконнекченный TCP сокет, f - хендл
 AR> файла) function TransmitFile(s:TSocket;f:HFILE):BOOLEAN; var i:DWord;
 AR> buf:array[1..1024] of
 AR> byte; readed,trail,fsize:DWord; begin Result:=true; SetFilePointer(f,0
 AR> ,NIL,FILE_BEGIN); fsize:=GetFileSize(f,NIL); for i:=1 to
 AR> trunc(fsize/Sizeof(buf)) do begin
 AR>     ZeroMemory(@buf,sizeof(buf));
 AR>     ReadFile(f,buf,sizeof(buf),readed,NIL);
         sleep(70);
 AR>     if winsock.send(s,buf,sizeof(buf),0)=SOCKET_ERROR then
 AR>      begin
 AR>        result:=false;
 AR>        exit;
 AR>      end;
 AR>   end;
 AR>  {И хвост}
 AR>  if (trunc(fsize/Sizeof(buf))*sizeof(buf))<fsize then
 AR>   begin
 AR>    trail:=fsize-(trunc(fsize/Sizeof(buf))*sizeof(buf));
 AR>    ZeroMemory(@buf,sizeof(buf));
 AR>    ReadFile(f,buf,trail,readed,NIL);
 AR>    if winsock.send(s,buf,trail,0)=SOCKET_ERROR then
 AR>      begin
 AR>        result:=false;
 AR>        exit;
 AR>      end;
 AR>  end;
 AR> end;
    Спасибо.
    У меня это зароботало только после установки маленькой паузы перед посылкой каждого пакета.

Dmitry
Ария.
--- 0f 0f 0e 0e 0e 0e 0c 0c 0a 09 09 06 03 00 00 00 ─┬┴┬─┴──┬─────┴─────
 * Origin: mailto: dim0k@mail.ru (2:5009/5.43)