Модераторы: Snowy, Poseidon, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TCPClient/TCPServer - обратная связь, Обмен текстом 
:(
    Опции темы
Akella
  Дата 30.1.2006, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329



как сервер должен отправить что-нить в ответ клиенту? Где, в каком, месте прописать код отправки текста от сервера клиенту??? smile

КОД СЕРВЕРА
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Sockets, winSock;

type
  TForm1 = class(TForm)
    TcpServer1: TTcpServer;
    memRecv: TMemo;
    Label3: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure TcpServer1Accept(Sender: TObject;
      ClientSocket: TCustomIpClient);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TClientDataThread = class(TThread)
  private
  public
    ListBuffer :TStringList;
    TargetList :TStrings;
    procedure synchAddDataToControl;
    constructor Create(CreateSuspended: Boolean);
    procedure Execute; override;
    procedure Terminate;
  end;


var
  Form1: TForm1;

implementation

{$R *.dfm}

//------------- TClientDataThread impl -----------------------------------------
constructor TClientDataThread.Create(CreateSuspended: Boolean);
begin
  inherited Create(CreateSuspended);
  FreeOnTerminate := true;
  ListBuffer := TStringList.Create;
end;

procedure TClientDataThread.Terminate;
begin
  ListBuffer.Free;
  inherited;
end;

procedure TClientDataThread.Execute;
begin
  Synchronize(synchAddDataToControl);
end;

procedure TClientDataThread.synchAddDataToControl;
begin
 TargetList.AddStrings(ListBuffer);
end;
//------------- end TClientDataThread impl -------------------------------------


procedure TForm1.FormCreate(Sender: TObject);
var
  wVerReq: WORD;
  wsaData: TWSAData;
  ip: pchar;
  h: PHostEnt;
  c: array[0..128] of char;
begin
  wVerReq := MAKEWORD(1, 1);
  WSAStartup(wVerReq, wsaData);
  {Получаем хост (имя) компа}
  GetHostName(@c, 128);
  h := GetHostByName(@c);
  {Достаем IP}
  ip := iNet_ntoa(PInAddr(h^.h_addr_list^)^);

  Caption := h^.h_Name+'/'+ip; //Host отображает хост(имя) компьютера
  tcpServer1.LocalHost := ip; //Теперь IPaddr отображает IP-адрес

  WSACleanup;
  tcpServer1.Open;
end;

procedure TForm1.TcpServer1Accept(Sender: TObject;
  ClientSocket: TCustomIpClient);
var
  s: string;
  DataThread: TClientDataThread;
begin
  // create thread
  DataThread:= TClientDataThread.Create(true);
  // set the TagetList to the gui list that you
  // with to synch with.
  DataThread.TargetList := memRecv.lines;

  // Load the Threads ListBuffer
  DataThread.ListBuffer.Add('*** подключение ***');
  DataThread.ListBuffer.Add('Удаленный хост: ' + ClientSocket.LookupHostName(ClientSocket.RemoteHost) +
   ' (' + ClientSocket.RemoteHost + ')');
  DataThread.ListBuffer.Add('===== Begin message =====');
  s := ClientSocket.Receiveln;
  while s <> '' do
  begin
    DataThread.ListBuffer.Add(s);
    s := ClientSocket.Receiveln;

  end;
  DataThread.ListBuffer.Add('===== End of message =====');

  // Call Resume which will execute and synch the
  // ListBuffer with the TargetList
  DataThread.Resume;
end;

end.

PM MAIL   Вверх
F1reF0x
Дата 31.1.2006, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 10.10.2005

Репутация: нет
Всего: нет



Код

procedure TMain.SendButtonClick(Sender: TObject);
begin
  idTCPClient1.WriteLn(NameEdit.Text + ' : ' + MessageEdit.Text);
  ChatMemo.Lines.Add(NameEdit.Text + ' : ' + MessageEdit.Text);
  MessageEdit.Text:= '';
end;

procedure TMain.FormCreate(Sender: TObject);
var
  RegIni: TRegIniFile;
begin
  IdTCPClient1.Port:= StrToInt(PortEdit.Text);
  IdTCPClient1.Host:= HostEdit.Text;
  IdTCPServer1.DefaultPort:= StrToInt(PortEdit.Text);
  idTCPServer1.Active := not idTCPServer1.Active;
  GreenImage.Visible:= False;
  RegIni:= TRegIniFile.Create('Software');
  RegIni.OpenKey('ModemChat', True);
  NameEdit.Text:= RegIni.ReadString('Settings', 'uname', 'User');
  HostEdit.Text:= RegIni.ReadString('Settings', 'host', '255.255.255.255');
  PortEdit.Text:= RegIni.ReadString('Settings', 'port', '31337');
  RegIni.Free;
end;

procedure TMain.CloseButtonClick(Sender: TObject);
begin
  Close;
end;

procedure TMain.IdTCPServer1Execute(AThread: TIdPeerThread);
begin
  ChatMemo.Lines.Add(AThread.Connection.ReadLn);
end;

procedure TMain.ConnectButtonClick(Sender: TObject);
begin
try
  IdTCPClient1.Port:= StrToInt(PortEdit.Text);
  IdTCPClient1.Host:= HostEdit.Text;
  IdTCPClient1.Connect;
  RedImage.Visible:= False;
  GreenImage.Visible:= True;
  ShowMessage('Соединение установленно');
except
  ShowMessage('Не могу соедениться с сервером');
end;
end;

procedure TMain.SaveButtonClick(Sender: TObject);
var
  RegIni: TRegIniFile;
begin
  RegIni:= TRegIniFile.Create('Software');
  RegIni.OpenKey('ModemChat', True);
  RegIni.WriteString('Settings', 'uname', NameEdit.Text);
  RegIni.WriteString('Settings', 'host', HostEdit.Text);
  RegIni.WriteString('Settings', 'port', PortEdit.Text);
  RegIni.Free;
  IdTCPClient1.Port:= StrToInt(PortEdit.Text);
  IdTCPClient1.Host:= HostEdit.Text;
  IdTCPServer1.DefaultPort:= StrToInt(PortEdit.Text);
end;

procedure TMain.DisconnectButtonClick(Sender: TObject);
begin
  IdTCPClient1.Disconnect;
  GreenImage.Visible:= False;
  RedImage.Visible:= True;
  ShowMessage('Вы отключены от сервера');
end;

procedure TMain.FormClose(Sender: TObject; var Action: TCloseAction);
var
  RegIni: TRegIniFile;
begin
  if IdTCPClient1.Connected = true then
  begin
  IdTCPClient1.Disconnect;
  IdTCPServer1.Active:= False;
  end;

  RegIni:= TRegIniFile.Create('Software');
  RegIni.OpenKey('ModemChat', True);
  RegIni.WriteString('Settings', 'uname', NameEdit.Text);
  RegIni.WriteString('Settings', 'host', HostEdit.Text);
  RegIni.WriteString('Settings', 'port', PortEdit.Text);
  RegIni.Free;
  ChatMemo.Lines.SaveToFile('Logs/' + DateToStr(Date) + '.txt');
end;

procedure TMain.MessageEditKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = 13 then SendButton.Click;
end;



Вот мой код, писал когда то.
PM MAIL   Вверх
Akella
Дата 31.1.2006, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329



как сервер должен отправить что-нить в ответ клиенту? Где, в каком, месте прописать код отправки текста от сервера клиенту???

Т.е. нужно рганизовать братную связь.

Прочитай название темы. smile

В твоем коде не могу найти кусок,в котором осуществляется обратная связь с клиентом. Клиентов может несколько в один момент.

Скажу сразу, что я НЕ пишу программу-чат.
PM MAIL   Вверх
Romikgy
Дата 31.1.2006, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146



Если один раз то можно
Цитата(Akella @ 30.1.2006, 16:22 Найти цитируемый пост)

procedure TForm1.TcpServer1Accept

здесь , если вообще , то надо будет перебрать все соединения/потоки , и передавать нужным, что хошь.

ЗЫ только в демах от индейцев они советуют в потоках сохранять хендл сокета, дабы его не посеять , а определять его асепте.


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Snowy
Дата 31.1.2006, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Что-то понаворочено.
Если создаем тред, то вот этот код должен быть в TClientDataThread.Execute;
Код

  s := ClientSocket.Receiveln;    
  while s <> '' do    
  begin    
    DataThread.ListBuffer.Add(s);    
    s := ClientSocket.Receiveln;    
  end;
  // а ответ здесь <<<<<<<<<<<<<


Но при создании треда не забуть дать ему указатель на клиентское подключение.
Соответственно у тебя в структуре треда должен быть такой указатель.
Добавлено @ 10:43
Перестроить нужно примерно вот так:
Код

  TClientDataThread = class(TThread)    
  private
    Socket: TClientSocket;

............

procedure TClientDataThread.Execute;    
begin    
  while Socket.Active do
  try
    DataThread.ListBuffer.Add('===== Begin message =====');    
    s := ClientSocket.Receiveln;    
    while s <> '' do    
    begin    
      DataThread.ListBuffer.Add(s);    
      s := Socket.Receiveln;    
    end;    
    DataThread.ListBuffer.Add('===== End of message =====');
    Synchronize(synchAddDataToControl);
    DataThread.ListBuffer.Add('====== Reply message =====');
    Socket.SendText(s);
    DataThread.ListBuffer.Add('===== End of message =====');
    Synchronize(synchAddDataToControl);
  except
  end;
end;

..........

begin    
  // create thread    
  DataThread:= TClientDataThread.Create(true);    
  // set the TagetList to the gui list that you    
  // with to synch with.    
  DataThread.TargetList := memRecv.lines;    
  // Load the Threads ListBuffer    
  DataThread.ListBuffer.Add('*** подключение ***');    
  DataThread.ListBuffer.Add('Удаленный хост: ' + ClientSocket.LookupHostName(ClientSocket.RemoteHost) +    
   ' (' + ClientSocket.RemoteHost + ')');    
  DataThread.Socket := ClientSocket;
  DataThread.Resume;    
end;

PM MAIL   Вверх
Akella
Дата 31.1.2006, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329



где можно взять нормальные демки для работы с сокетами
на сайте индейцев, я так понял, только старое, т.к. в D2006 не открываются нормально.
В демках D2006 тоже не нашёл.
мож у кого есть примеры, скиньте на мыло или сюды, буду признгателен smile +
PM MAIL   Вверх
Snowy
Дата 31.1.2006, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Цитата(Akella @ 31.1.2006, 11:08 Найти цитируемый пост)
D2006 не открываются нормально.

Там Indy 10. Качай примеры для 10-ки. 9-е примеры разумеется не пойдут.

PM MAIL   Вверх
Akella
Дата 31.1.2006, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329



мне нужны простые примеры для передачи текста, файлов от клиента к серверу и обратно, с обратной связью. smile
PM MAIL   Вверх
Romikgy
Дата 31.1.2006, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146



http://forum.vingrad.ru/index.php?showtopi...38;amp;p=631589
Это демки к 10 индейцам
Добавлено @ 12:05
Ну дык вот в первом же файле
Код

procedure TformMain.IdTCPServer1Execute(AContext: TIdContext);
var
  LCmd: string;
  LCity: string;
  LLine: string;
  LZipCode: string;
begin
  with AContext.Connection.IOHandler do try
    LLine := ReadLn;
    LCmd := Fetch(LLine);
    if AnsiSameText(LCmd, 'QUIT') then begin
      WriteLn('202-Paka!');
      WriteLn('202 ' + IntToStr(TUserData(AContext.Data).FRequestCount)
       + ' requests processed.');
      AContext.Connection.Disconnect;
    end else if AnsiSameText(LCmd, 'Lookup') then begin
      WriteLn('201 Data follows');
      LZipCode := Fetch(LLine);
      while LZipCode <> '' do begin
        LCity := FZipCodeList.Values[LZipCode];
        if LCity <> '' then begin
          Inc(TUserData(AContext.Data).FRequestCount);
          WriteLn(LZipCode + ': ' + LCity);
        end;
        LZipCode := Fetch(LLine);
      end;
      WriteLn('.');
    end else if AnsiSameText(LCmd, 'Help') then begin
      WriteBufferOpen; try
        WriteLn('100 Help follows');
        WriteLn('Help');
        WriteLn('  Provides a list of supported commands.');
        WriteLn('Lookup <Post Code 1> <Post Code 2> ...');
        WriteLn('  Looks up and provides associated cities for specified zip codes.');
        WriteLn('Quit');
        WriteLn('  Signals server that a disconnect is requested.');
        WriteLn('.');
      finally WriteBufferClose; end;
    end else begin
      WriteLn('400 Unknown Command');
    end;
  except
    on E: Exception do begin
      WriteLn('500-Unknown Internal Error');
      WriteLn('500 ' + StringReplace(E.Message, EOL, ' ', [rfReplaceAll]));
      raise;
    end;
  end;
end;


WriteLn - ты и отвечаешь клиенту , че не понятно smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Akella
Дата 31.1.2006, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329



здесь много лишнего, даже не знаю что удалить, все равно спасибо
Добавлено @ 12:51
Клиент подвисает и текст не получаетsmile
код сервера
Код

procedure TformMain.IdTCPServer1Execute(AContext: TIdContext);
var
  LCmd: string;
  LCity: string;
  LLine: string;
  LZipCode: string;
begin

  with AContext.Connection.IOHandler do try

    LLine := ReadLn;
    memo1.Lines.Add(lline);
    WriteLn('Привет от Сервера');
    WriteBufferClose;

  except


  end;
end;


клиент получает только это "Zip Code - Сергвер готов.", странно

Код

procedure TformMain.IdTCPServer1Connect(AContext: TIdContext);
begin
  AContext.Connection.IOHandler.WriteLn('200 Zip Code - Сергвер готов.');
  AContext.Data := TUserData.Create;
end;


PM MAIL   Вверх
Romikgy
Дата 31.1.2006, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146



Цитата(Akella @ 31.1.2006, 11:40 Найти цитируемый пост)

здесь много лишнего

Конешно , это ж демка и написанна кемто для своих нужд
Код

procedure TForm1.IdTCPServerExecute(AContext: TIdContext);
var
  connected: boolean;
  line: string;
  connectionNumber: integer;
begin
   AContext.Connection.IOHandler.WriteLn('Hello');
  connected:= true;
  while connected do begin
    try
      line:= AContext.Connection.IOHandler.ReadLn;
      AContext.Connection.IOHandler.WriteLn('>>'+line);
      memo1.Lines.add(format('%s',[line]));
      if (ansiUpperCase(line) = 'BYE') or (ansiUpperCase(line) = 'QUIT') then begin
        AContext.Connection.Disconnect;
        connected:= false;
      end; { if (ansiUpperCase(line) = 'BYE') or (ansiUpperCase(line) = 'QUIT') }
    except
      connected:= false;
    end; { try/except }
  end; { do while connected }

end; { ID TCP SERVER EXECUTE }


Чет типа такого, проверь у меня нет 10 индейцев smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Akella
Дата 31.1.2006, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329



как передать файл через сокеты с помощью TMemoryStream???
Добавлено @ 17:22
передаю текстовый файл, но он почемуто не передается.
Всё без ошибок, но файл, я так понимаю не передается.
клиент
Код

procedure TForm1.btnConnectClick(Sender: TObject);
var
  line: string;
  Stream: TMemoryStream;
begin
  btnConnect.enabled:= false;
  IdTCPClient.Host:= edtHostAddr.text;
  try
    IdTCPClient.Connect;
    ledConnected.brush.color:= clLime;
    edit1.SetFocus;
  except
    btnConnect.Enabled:= true;
  end; { try/except }

  try
    line:= IdTCPClient.IOHandler.ReadLn;
    if line = 'READY' then begin
      Stream := TMemoryStream.Create;
      IdTCPClient.IOHandler.ReadStream(Stream);
      Stream.SaveToFile('c:\12.txt');
      Stream.Free;
    end;

    memo1.lines.add(line);
  except
    btnConnect.enabled:= true;
  end; { try/except }

  if btnConnect.Enabled then ledConnected.brush.color:= clRed;

end; { BTN CONNECT CLICK }



сервер
Код

procedure TForm1.IdTCPServerExecute(AContext: TIdContext);
var
  connected: boolean;
  line: string;
  connectionNumber: integer;
  Stream: TMemoryStream;
begin
  { [!] NOTE: since this is a simple example to show how SSL works, we did not bother to synchronize
              any of the VCL/display calls - remember that the VCL is NOT thread-safe! }

  { Find an open connection... [!] }
  connectionNumber:= 0;
  while (ledConnected[connectionNumber].Brush.Color = clOn) do inc(connectionNumber);

  ledConnected[connectionNumber].Brush.Color:= clOn;  { show that we're connected [!] }

  AContext.Connection.IOHandler.WriteLn('Hello');
  connected:= true;
  while connected do begin
    try
      line:= AContext.Connection.IOHandler.ReadLn;

      if line = 'GET_FILE' then begin
        AContext.Connection.IOHandler.WriteLn('READY');
        Stream := TMemoryStream.Create;
        Stream.LoadFromFile('c:\11.txt');
        AContext.Connection.IOHandler.Write(Stream);
        Stream.Free;
      end else
      begin
        AContext.Connection.IOHandler.WriteLn('Эхо>>'+line);
        memo1.Lines.add(format('[%d] %s',[connectionNumber,line]));
      end;

      if (ansiUpperCase(line) = 'BYE') or (ansiUpperCase(line) = 'QUIT') then begin
        AContext.Connection.Disconnect;
        connected:= false;
      end; { if (ansiUpperCase(line) = 'BYE') or (ansiUpperCase(line) = 'QUIT') }
    except
      connected:= false;
    end; { try/except }
  end; { do while connected }

  ledConnected[connectionNumber].Brush.Color:= clOff;    { show that we've disconnected [!] }

end; { ID TCP SERVER EXECUTE }



Это сообщение отредактировал(а) Akella - 31.1.2006, 17:24
PM MAIL   Вверх
Romikgy
Дата 31.1.2006, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146



Код

procedure TForm1.IdTCPServerExecute(AContext: TIdContext);
var
  connected: boolean;
  line: string;
  connectionNumber: integer;
  Stream: TMemoryStream;
begin
  { [!] NOTE: since this is a simple example to show how SSL works, we did not bother to synchronize
              any of the VCL/display calls - remember that the VCL is NOT thread-safe! }
  { Find an open connection... [!] }
  connectionNumber:= 0;
  while (ledConnected[connectionNumber].Brush.Color = clOn) do inc(connectionNumber);
  ledConnected[connectionNumber].Brush.Color:= clOn;  { show that we're connected [!] }
  AContext.Connection.IOHandler.WriteLn('Hello');
  connected:= true;
  while connected do begin
    try
      line:= AContext.Connection.IOHandler.ReadLn;
      if line = 'GET_FILE' then begin
        AContext.Connection.IOHandler.WriteLn('READY');
        Stream := TMemoryStream.Create;
        Stream.LoadFromFile('c:\11.txt');
        Stream.Position:=0; 
        AContext.Connection.IOHandler.Write(Stream);
        Stream.Free;
      end else
      begin
        AContext.Connection.IOHandler.WriteLn('Эхо>>'+line);
        memo1.Lines.add(format('[%d] %s',[connectionNumber,line]));
      end;
      if (ansiUpperCase(line) = 'BYE') or (ansiUpperCase(line) = 'QUIT') then begin
        AContext.Connection.Disconnect;
        connected:= false;
      end; { if (ansiUpperCase(line) = 'BYE') or (ansiUpperCase(line) = 'QUIT') }
    except
      connected:= false;
    end; { try/except }
  end; { do while connected }
  ledConnected[connectionNumber].Brush.Color:= clOff;    { show that we've disconnected [!] }
end; { ID TCP SERVER EXECUTE }


Может так, попробуй smile
Если файл текстовый, то можно через Tstringlist, загрузить в него и передать как одну строку


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Akella
Дата 31.1.2006, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329



нет, то же самое
файл передается но кусками и в клиентский мемо при очередной отправке како-нить строки на сервер smile
PM MAIL   Вверх
Alex
Дата 31.1.2006, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 4
Всего: 162



Akella обратился ко мне в привате и попросил помочь, как передать файл в ответ на запрос клиента, используя TStream. Я, думал все просто ведь примеров в сети навалом и до момента пока не попытался запустить все, что мне прислал Akella, что скорей всего человек просто забыл какой-то маленький момент и из-за этого ничего не работает. Но не тут-то было, Indy10 просто на отрез отказывалась работать по тем схемам, которые приведены для Indy9, точнее просто половина методов не оказалось у компонентов или входные параметры у обработчиков вообще оказались другого типа не как в Indy9. Бардак в общем полный, хорошо хоть у меня ни один проект не использует Indy и о чем только разработчики библиотеки думаю...

Ладно, это все лирика пример передачи по SSL протоколу файла с сервера в ответ на запрос клиенту прикреплен к посту

Это сообщение отредактировал(а) Alex - 31.1.2006, 21:07

Присоединённый файл ( Кол-во скачиваний: 170 )
Присоединённый файл  Indy10Example_Alex.rar 27,90 Kb


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0705 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.