Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.12.2011, 23:39
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию передача данных TcpServer TcpClient

получение файла код клиента
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
msg : string;
sz : integer;
  stream: TMemoryStream;
begin
  tcpClient1.RemoteHost:=Edit1.Text;
  tcpClient1.Active := true;
 if TcpClient1.Connect then
  begin
    TcpClient1.Sendln('basa');
    msg := Tcpclient1.Receiveln;
      sz := StrToInt(msg);
      stream := TMemoryStream.Create;
      stream.SetSize(sz);
      Tcpclient1.ReceiveBuf(stream.Memory^, sz);
      stream.SaveToFile('base.txt');
    TcpClient1.Disconnect;
  end
  else showmessage('Error connecting');
  tcpClient1.Active := false;
end;
код сервера
Код:
procedure TForm1.TcpServer1Accept(Sender: TObject;
  ClientSocket: TCustomIpClient);
var
  stream: TMemoryStream;
  msg: string;
  sz: integer;
begin
 msg := ClientSocket.Receiveln;
    if (msg= 'basa') then
    begin
      stream := TMemoryStream.Create;
      stream.LoadFromFile('ServBase\base1.txt');
      ClientSocket.Sendln(inttostr(stream.Size));
      ClientSocket.SendBuf(stream.Memory^, stream.Size);
    end
при получениий он не полный и плюс вот это в конце, и это по локалке
Цитата:
р*є
р*є
р*є
р*є
р*є
р*є
р*є

да и собственно как передать данные с клиента

сервер
Код:
procedure TForm1.TcpServer1Accept(Sender: TObject;
  ClientSocket: TCustomIpClient);
var
  stream: TMemoryStream;
  msg: string;
  sz: integer;
begin
 msg := ClientSocket.Receiveln;
    if (msg= 'basa') then
    begin
      stream := TMemoryStream.Create;
      stream.LoadFromFile('ServBase\base1.txt');
      ClientSocket.Sendln(inttostr(stream.Size));
      ClientSocket.SendBuf(stream.Memory^, stream.Size);
    end
    else if msg = 'base' then
    begin
      ClientSocket.Sendln('ok');
      stream := TMemoryStream.Create;
      sz := StrToInt(msg);
      stream.SetSize(sz);
      ClientSocket.Sendln('ok');

      ClientSocket.ReceiveBuf(stream.Memory^, sz);
      stream.SaveToFile('ServBase\base1.txt');
      stream.Free;
      end;
end;

клиент
Код:
procedure TForm1.Button3Click(Sender: TObject);
var
  stream: TMemoryStream;
  msg: string;
begin
  tcpClient1.Active := true;
  if TcpClient1.Connect then
  begin
    stream := TMemoryStream.Create;
    stream.LoadFromFile('base.txt');
    TcpClient1.Sendln('base');
    if TcpClient1.Receiveln = 'ok' then
     TcpClient1.Sendln(IntToStr(stream.Size));
    if TcpClient1.Receiveln = 'ok' then
      TcpClient1.SendBuf(stream.Memory^, stream.Size);
    tcpClient1.Active := false;
    TcpClient1.Disconnect;
  end
  else showmessage('Error connecting');
end;
отправляю сигнал о передаче base
получаю разрешение ок
передаю размер
получаю разрешение и отправляю файл

но похоже что никаких разрешений не приходит
Ответить с цитированием
  #2  
Старый 31.12.2011, 14:01
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

Код:
else if msg = 'base' then
    begin
      ClientSocket.Sendln('ok');
      stream := TMemoryStream.Create;
      msg := ClientSocket.Receiveln;
      sz := StrToInt(msg);
      stream.SetSize(sz);
      ClientSocket.Sendln('ok');

      ClientSocket.ReceiveBuf(stream.Memory^, sz);
      stream.SaveToFile('ServBase\base1.txt');
      stream.Free;
      end;
проблему с отправкой с киента решил

вопрос как сделать оповещение о загрузке/отправке файла?
сразу после
TcpClient1.SendBuf(stream.Memory^, stream.Size);
ClientSocket.ReceiveBuf(stream.Memory^, sz);
вставлять Отправлено/принято?
Ответить с цитированием
  #3  
Старый 01.01.2012, 21:11
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

оповещение сделал..
при сохранении файла на клиенте выдаю что окей
при сохранении на сервере шлю клиенту окей

но все таки как решить

что иногда приходит не полностью вместе с
р*є
р*є
р*є
р*є
р*є
р*є
р*є
Ответить с цитированием
  #4  
Старый 01.01.2012, 21:47
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

черт, файл весом 600кб передался на половину а остальную половину заполнили пробелы
я где то читал что подключение закрывается до передачи файла подскажите что сделать
Ответить с цитированием
  #5  
Старый 23.01.2012, 01:43
ferede ferede вне форума
Прохожий
 
Регистрация: 23.01.2012
Сообщения: 1
Репутация: 10
По умолчанию

а как долго делают монтаж локальной сети?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:58.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter