Короче проблема в следующем — если локально читаю файл и в цикле по 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);
Здравствуйте, Yoo.
Протокол-то какой? Если UDP, то все так и должно быть.
Если TCP, то это у тебя в проге глюк. Однозначна!
Здравствуйте, 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 >>