Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.15;
Скачать: CL | DM;

Вниз

ПОМОГИТЕ ! Как передать данные от одного приложения по сети друго   Найти похожие ветки 

 
antoxa2005   (2005-09-30 12:33) [0]

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

Не могу реализовать уже две недели.


 
Digitman ©   (2005-09-30 12:49) [1]


> Не могу реализовать уже две недели


Тады рассказывай, что делал и сделал за эти две недели ...

Не дурака ж валял, наверно - какие-то наработки таки поимел, пусть и не фунциклирующие ожидаемым образом ..


 
shamansky   (2005-09-30 12:54) [2]

ставишь компоненту clientsocket и serversocket

// Client Program:
// Send "power" to Client to shutdown the machine.
// Send "reset" to Client to reset the machine.

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Clientsocket1: TClientSocket;
    StatusBar1: TStatusBar;
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    Button3: TButton;
    CheckBox1: TCheckBox;
    Checkbox2: TCheckBox;
    procedure Button1Click(Sender : TObject);
    procedure Button2Click(Sender : TObject);
    procedure Clientsocket1Error(Sender : TObject; Socket : TCustomWinSocket;
      ErrorEvent : TErrorEvent; var ErrorCode : integer);
    procedure Clientsocket1Disconnect(Sender : TObject;
      Socket : TCustomWinSocket);
    procedure Clientsocket1Connect(Sender : TObject;
      Socket : TCustomWinSocket);
    procedure Button3Click(Sender : TObject);
    procedure FormClose(Sender : TObject; var Action : TCloseAction);
    procedure FormDestroy(Sender : TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1 : TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender : TObject);
begin
  Clientsocket1.Active := True;
end;

procedure TForm1.Button2Click(Sender : TObject);
begin
  Clientsocket1.Active := False;
end;

procedure TForm1.Clientsocket1Error(Sender : TObject;
  Socket : TCustomWinSocket; ErrorEvent : TErrorEvent;
  var ErrorCode : integer);
begin
  errorcode := 0;
  StatusBar1.SimpleText := "Error";
end;

procedure TForm1.Clientsocket1Disconnect(Sender : TObject;
  Socket : TCustomWinSocket);
begin
  StatusBar1.SimpleText := "Disconnect";
end;

procedure TForm1.Clientsocket1Connect(Sender : TObject;
  Socket : TCustomWinSocket);
begin
  StatusBar1.SimpleText := Clientsocket1.Address;
end;

procedure TForm1.Button3Click(Sender : TObject);
var
  ukaz : string;
  orders : string;
  Text : string;
  box : string;
begin
  ukaz := edit1.Text;
  Clientsocket1.Socket.SendText(ukaz);
  if checkbox1.Checked = True then
  begin
    orders := "power";
    Clientsocket1.Socket.SendText(orders);
  end;
  if Checkbox2.Checked = True then
  begin
    Text := "reset";
    Clientsocket1.Socket.SendText(Text);
  end;
end;

procedure TForm1.FormClose(Sender : TObject; var Action : TCloseAction);
begin
  Clientsocket1.Active := False;
end;

procedure TForm1.FormDestroy(Sender : TObject);
begin
  Clientsocket1.Active := False;
end;

end.

// Client Program

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Serversocket1: TServerSocket;
    procedure FormClose(Sender : TObject; var Action : TCloseAction);
    procedure FormDestroy(Sender : TObject);
    procedure FormCreate(Sender : TObject);
    procedure Serversocket1ClientError(Sender : TObject;
      Socket : TCustomWinSocket; ErrorEvent : TErrorEvent;
      var ErrorCode : integer);
    procedure Serversocket1ClientRead(Sender : TObject;
      Socket : TCustomWinSocket);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1 : TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormClose(Sender : TObject; var Action : TCloseAction);
begin
  Serversocket1.Active := False;
end;

procedure TForm1.FormDestroy(Sender : TObject);
begin
  Serversocket1.Active := False;
end;

procedure TForm1.FormCreate(Sender : TObject);
begin
  Serversocket1.Active := True;
end;

procedure TForm1.Serversocket1ClientError(Sender : TObject;
  Socket : TCustomWinSocket; ErrorEvent : TErrorEvent;
  var ErrorCode : integer);
begin
  errorcode := 0;
end;

procedure TForm1.Serversocket1ClientRead(Sender : TObject;
  Socket : TCustomWinSocket);
var
  ukaz : string;
  orders : string;
  Text : string;
  box : string;
begin
  ukaz := socket.ReceiveText;
  label1.Caption := "reciving...";
  ShellExecute(Handle, "open", PChar(ukaz), PChar(""), nil, sw_show);
  Text := socket.ReceiveText;
  orders := socket.ReceiveText;
  if orders = "power" then
  begin
    ShellExecute(Handle, "open", PChar("shutdown.exe"), PChar("-s"), nil, sw_show);
    Application.MessageBox("You will be turned off", "Warning", mb_iconexclamation);
    Serversocket1.Active := False;
    Form1.Close;
  end;
  if Text = "reset" then
  begin
    ShellExecute(Handle, "open", PChar("shutdown.exe"), PChar("-r"), nil, sw_show);
    Application.MessageBox("You will be reset", "Warning", mb_iconexclamation);
    Serversocket1.Active := False;
    Form1.Close;
  end;
end;

end.


 
Digitman ©   (2005-09-30 16:29) [3]


> shamansky   (30.09.05 12:54) [2]


это НЕ будет работать в условиях глоб.сети.


 
kami ©   (2005-09-30 19:00) [4]

Digitman ©   (30.09.05 16:29) [3]
Почему ?


 
antoxa2005   (2005-10-01 08:39) [5]

Нет, как передать на сервер и получить ответ я знаю.

Мне необходимо чтобы после отправки сообщения серверу программа проверила получила ли она от сервера ответ именно на свое сообщение вообще и правильный ли ответ она получила.


 
Wistful ©   (2005-10-02 00:15) [6]

создай свою структуру сообщения где указывается например отправитель, получатель, код сообщения или что-то в этом роде.

что в данном случае значит "правильный ли ответ" я если честно не понял.


 
antoxa2005   (2005-10-02 04:07) [7]

Короче я отправляю сообщение на сервер sendText("1234567890")
запускаю таймер на несколько секунд в это время от сервера приходит ответ и процедура на клиенте Read... отрабатывает т.е. записывает значение ответа в переменную к этому времени таймер отщелкивает свой первый "тайм" и программа проверяет переменную если там что-то есть и если это что-то то, что надо, то ОК иначе не ОК.

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



Страницы: 1 вся ветка

Текущий архив: 2006.01.15;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.049 c
14-1134862849
Германн
2005-12-18 02:40
2006.01.15
Архивы форума за май 2005


5-1121121621
Brack
2005-07-12 02:40
2006.01.15
Как можно ScrollBox`у добавить свойство Canvas?


2-1135515974
gidd
2005-12-25 16:06
2006.01.15
ScrollBox1.ComponentCount


2-1135286082
Lisii
2005-12-23 00:14
2006.01.15
Архиватор (сжатие данных)


3-1132123711
Карелин Артем
2005-11-16 09:48
2006.01.15
Получение всех FK в базе MS SQL 2000.