Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Работа с Socket.SendBuffer


Автор: BaD_SeCt0R 9.10.2006, 16:51
Пожалуйста, подскажите, как правильно работать с TClien/ServerSocket.SendBuffer!!! У меня всякая белиберда отправляется. И как узнать размер отправляемого буфера тоже не знаю. Через Socket.ReceiveLength не выходит. smile 

Автор: Fallen_Angel 9.10.2006, 22:08
Лично я отправляю сообщения примерно так:

Код

procedure TChat.SendClick(Sender: TObject);
var
  s: string;
begin

if (Input.Text ='') or (Input.Text =' ') then
  begin
    Input.Lines.Clear;
    Exit;
  end;
  else begin
    s := '#M';
    s := s + Input.Text;
    ClientSocket1.Socket.SendText(s);
  end;
end;


а принимаю вот так:

Код

procedure TChat.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var
  s: String;
begin
  s := Socket.ReceiveText;

  if Copy(s,1,2) = '#M' then begin
    Delete(s,1,2);
    //Дальше пишешь код, куда будешь выводить полученный текст, например:
    Main.Lines.Add(s);
  end;
end;


есстественно, нужно в сервере добавить

Код

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  s: string;
  i: Integer;
begin
{сохраняем в s присланную нам строку}
    s := Socket.ReceiveText;
    if Copy(s,1,2) = '#M' then begin
     for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do
      ServerSocket1.Socket.Connections[i].SendText(s);
     Exit;
    end;
end;


ну в общем примерно так

Автор: BaD_SeCt0R 10.10.2006, 08:20
С текстом-то как раз понятно, а вот если надо отослать или принять какую-либо другую инфу и размером больше строки - вопрос. smile 

Автор: Snowy 10.10.2006, 09:10
сначала передавай длину буфера (4 байта), а только потом сам буфер.
На приёме читай 4 байта, выделяй буфер указанного размера и потом принимай его.

Добавлено @ 09:11 
В смысле - сам отправляй размер буфера и сам принимай его.
За тебя этого делать не будут.

Автор: Fallen_Angel 10.10.2006, 16:16
Смотри тут:

http://forum.vingrad.ru/index.php?showtopic=21411&st=30&#entry328425

Готовый пример обмена файлами между клиетом и сервером

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)