Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Как послать и принять данные?


Автор: DragonFire 28.2.2007, 15:17
Вообщем пытаюсь научится передовать строчку текстовую от клиента к серверу через инет. Вот код запуска/остановки сервера:
Код

procedure TForm1.bRunClick(Sender: TObject);
begin
  if not SocketServer.Active then begin
    SocketServer.Port:=2225;
    Status.Lines.Add('Сервер запущен');
    SocketServer.Open;
  end
  else Status.Lines.Add('Сервер уже запущен');
end;

//Остановка сервера
procedure TForm1.bStopClick(Sender: TObject);
begin
  SocketServer.Close;
  Status.Lines.Add('Сервер остановлен');
end;

А вот как послать и принять данные, или хотябы инициализировать клиент чето незнаю. Точнее покопался в готовом коде примеров, чето нифига не заработало smile 

Автор: Matematik 28.2.2007, 16:00
Отправлять ClientSocket1.Socket.SendText('текст')
Принимать в событии OnClientRead через Socket.ReceiveText

Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    bSendtext: TButton;
    Edit1: TEdit;
    ClientSocket1: TClientSocket;
    ServerSocket1: TServerSocket;
    bConnect: TButton;
    procedure FormCreate(Sender: TObject);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure bConnectClick(Sender: TObject);
    procedure ServerSocket1ClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure bSendtextClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.bConnectClick(Sender: TObject);
begin
  ClientSocket1.Port := 12398;
  ClientSocket1.Host := 'localhost';
  ClientSocket1.Open;
end;

procedure TForm1.bSendtextClick(Sender: TObject);
begin
  ClientSocket1.Socket.SendText(edit1.text)
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ServerSocket1.Port := 12398;
  ServerSocket1.Open;
end;

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  ShowMessage('Слиент соединился');
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  ShowMessage(Socket.ReceiveText);
end;

end.

Автор: DragonFire 28.2.2007, 17:39
Все конечно здорово, спасибо, НО:
1) при отключенном сервере выдается ошибка, как проверить произошло ли соединение с сервером или был сбой?
2) при попытке отправить сообщение вылетает ошибка и на сервере и на клиенте аля:
Socker error 10053 на клиенте 
Windows Socket Error: Запрос на отправку или получение данных no adress was supplied (10057) на сервере
З.Ы. клиент и сервер - отдельные программы, запускающиеся с одного компа smile

Добавлено @ 17:43 
Так с ошибкой разобрался, немного напутал там smile
Остается тока первый пункт 
1) при отключенном сервере выдается ошибка, как проверить произошло ли соединение с сервером или был сбой?

Автор: Matematik 28.2.2007, 18:34
В неблокирующем режиме (по умолчанию) о соединении говорит событие OnConnect. Ошибки ловятся в событии OnError/
Писать в cокет клиент может после (или в) события OnWrite

Автор: DragonFire 28.2.2007, 19:32
А как всеже заставить клиент не выдавать ошибок? Добивил обработку свою события onError, всеравно выдается сначало мое уведомление а потом ошибка...

Автор: Matematik 2.3.2007, 10:51
Справку по OnError почитай

Автор: DragonFire 2.3.2007, 14:46
Отлично спасибо smile
Конечно в хелпе не рылся, но сам догнал:
Код

ErrorCode:=0;


И наконец последнее что меня мучит smile
Как заставить сервер послать ответ клиенту?

Автор: dodik 3.3.2007, 01:03
ServerSocket1.Socket.Connections[0].SendText('text');

Автор: DragonFire 4.3.2007, 13:33
Спасибо всем smile 
Вопрос решен

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