![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ПОМОГИТЕ ! Как передать данные от одного приложения по сети друго [D7, WinXP]
antoxa2005 © (2005-09-30 12:33:00)Как передать данные от одного приложения по сети другому, дождаться ответа затем в зависимости от полученного рузультата продолжить работу приложения.
Не могу реализовать уже две недели.
antoxa2005 (2005-10-02 04:07:00) [1]Короче я отправляю сообщение на сервер sendText('1234567890')
запускаю таймер на несколько секунд в это время от сервера приходит ответ и процедура на клиенте Read... отрабатывает т.е. записывает значение ответа в переменную к этому времени таймер отщелкивает свой первый "тайм" и программа проверяет переменную если там что-то есть и если это что-то то, что надо, то ОК иначе не ОК.
Т.к. я понял не возможно проверить ответил ли сервер на сообщение или нет кроме как подождать по таймеру время с запасом для прохождения вопрос-ответ и проверить значения переменных.
Wistful (2005-10-02 00:15:00) [2]создай свою структуру сообщения где указывается например отправитель, получатель, код сообщения или что-то в этом роде.
что в данном случае значит "правильный ли ответ" я если честно не понял.
antoxa2005 (2005-10-01 08:39:00) [3]Нет, как передать на сервер и получить ответ я знаю.
Мне необходимо чтобы после отправки сообщения серверу программа проверила получила ли она от сервера ответ именно на свое сообщение вообще и правильный ли ответ она получила.
kami (2005-09-30 19:00:00) [4]Digitman © (30.09.05 16:29) [3]
Почему ?
Digitman (2005-09-30 16:29:00) [5]
> shamansky (30.09.05 12:54) [2]
это НЕ будет работать в условиях глоб.сети.
shamansky (2005-09-30 12:54:00) [6]ставишь компоненту 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 12:49:00) [7]
> Не могу реализовать уже две недели
Тады рассказывай, что делал и сделал за эти две недели ...
Не дурака ж валял, наверно - какие-то наработки таки поимел, пусть и не фунциклирующие ожидаемым образом ..