Re: Re: Помогите....
От: Sinclair Россия https://github.com/evilguest/
Дата: 11.03.03 16:14
Оценка: 21 (1)
Здравствуйте, Yoo, Вы писали:

Yoo>Короче проблема в следующем — если локально читаю файл и в цикле по 10 байт посылаю, то все работает, но уж очень долго, если считывать большее количество байт (следовательно и посылать большее), то почему — то когда принимаю (клиентом), то приходит не все содержимое файла, аналогично с заменой задержки (sleep). В чем проблема, а может это из — за того, что я пробую это локально?

Yoo>Помогите...
Yoo> hFile:=CreateFile(name, GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);
Yoo> len:=GetFileSize(hFile, nil);
Yoo> c:=len;
Yoo> while c>0 do
Yoo> begin

Yoo> ReadFile(hFile,buf,10,Bytes,nil);


Yoo> if(Bytes>0)then

Yoo> begin

Yoo> send(sock, buf, Bytes, 0);

Yoo> ZeroMemory(@buf, sizeof(buf));
Yoo> Sleep(40);
Yoo> dec(c, Bytes);

Yoo> end;

Yoo> end;
Yoo> CloseHandle(hFile);
Ну, во-первых тут какая-то лажа. Четвертый параметр функции ReadFile — это указатель на переменную, в которую она положит количество прочитанных байт. А в коде почему-то сравнивается с нулем этот указатель, а не то, на что он указывает. (Может, это опечатка? Тогда для публикации кода на RSDN лучше пользоваться буфером обмена)
Во-вторых некриво бы закрыть сокет-то. А то протокол будет ждать, пока ты ему еще данных дошлешь, перед отправкой пакета.
Зачем там слип, я хоть убей не понял. Чтобы сетку меньше загружать что ли?
Ну и напоследок — без кода клиента что-либо сказать трудно. Возможно, косяк именно в нем.
... << RSDN@Home 1.0 beta 6 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Помогите....
От: Yoo  
Дата: 10.03.03 17:46
Оценка:
Короче проблема в следующем — если локально читаю файл и в цикле по 10 байт посылаю, то все работает, но уж очень долго, если считывать большее количество байт (следовательно и посылать большее), то почему — то когда принимаю (клиентом), то приходит не все содержимое файла, аналогично с заменой задержки (sleep). В чем проблема, а может это из — за того, что я пробую это локально?
Помогите...
hFile:=CreateFile(name, GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);
len:=GetFileSize(hFile, nil);
c:=len;
while c>0 do
begin

ReadFile(hFile,buf,10,Bytes,nil);

if(Bytes>0)then
begin

send(sock, buf, Bytes, 0);
ZeroMemory(@buf, sizeof(buf));
Sleep(40);
dec(c, Bytes);

end;
end;
CloseHandle(hFile);
aааааааа
Re: Помогите....
От: kiamor  
Дата: 11.03.03 06:01
Оценка:
Здравствуйте, Yoo.

Протокол-то какой? Если UDP, то все так и должно быть.
Если TCP, то это у тебя в проге глюк. Однозначна!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.