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)