Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не понимаю - почему ошибка при копировании через ClientSocket?:( [D5, Win2k, WinXP]


Страницы:   1 2

TankMan ©   (2005-03-23 12:15:00) 

Посмотрел в FAQ про передачу файлов через client-server Socket вот что получилось:

{Процедура на ClientSocket}
var sFile:TFileStream;
begin
sFile:=TFileStream.Create(eFileName.text,fmOpenReadWrite);
csClient.Socket.SendText('@-'+Edit2.text+'-@#-'+inttostr(sFile.Size)+'-#');
csClient.Socket.SendStream(sFile);
sleep(100);
sFile.Free;
csClient.Close;

{Прием на ServerSocket}

procedure TForm1.ssServerClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
var command,param:string;
l: DWORD;
buf: PChar;
src: TFileStream;
begin
if ReceiveFile then
begin
 l := Socket.ReceiveLength;
 GetMem(buf,l+1);
 Socket.ReceiveBuf(buf,l);
 if not fileExists(ExtractFilePath(ParamStr(0))+'vot.upd') then
 src:=TFileStream.Create(ExtractFilePath(ParamStr(0))+'vot.upd',fmCreate)
 else src:=TFileStream.Create(ExtractFilePath(ParamStr(0))+'vot.upd',fmOpenReadWrite);
 src.Seek(0,soFromEnd);
 src.WriteBuffer(buf,l);
 FreeMem(buf);
 Application.ProcessMessages;
 src.Free;
 LenghtofFile:=LenghtofFile-l;
 if LenghtofFile=0 then begin ReceiveFile:=false;ShowMessage('File is received');end;
 exit;
end;  //   }
if ExtractParamCommand(Socket.ReceiveText,command,param) then
Memo1.Lines.Add(Socket.RemoteAddress+':'+Command+' - '+Param)
else Memo1.Lines.Add(Socket.RemoteAddress+':'+Param);
if command='update' then begin ReceiveFile:=true; LenghtofFile:=strtoint(Param);end; //}


Вобщем суть такова - клиент в начале посылает строку с коммандой и параметром а сервер приняв комманду, узнает не update-ли это, и если так то (как я задумал :) ) начинает прием файла...
Но тут то и проблема, почему-то выбрав файл в клиенте , я нажав отправить на строке
csClient.Socket.SendStream(sFile);
Выдается ошибка stack overflow, или так же выдавалась ошибка EPrivilege :(, я бы понял, если бы я был не под администратором, но почемуж он выдает ошибку :( не понимаю :(
Ах да забыл сказать, для удобства и клиент и сервер находится на одном компе на клиенте стоит Address:='127.0.0.1', соединяется нормально...
Может кто знает более надежный/удобный способ/алгоритм передачи через socket?


TankMan   (2005-03-23 12:17:00) [21]

И еще забыл сказать, что на строке
FreeMem(buf);
В процедуре приема данных почему-то выдается ошибка access violation, хотя GetMem выдает положительный результат :(


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо