Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Server&ClientSocket [D5, Win95/98, WinME, NT4, Win2k, WinXP]


dr.karter ©   (2002-08-30 14:16:00) 

Уважаемые Мастерки. Научите пожалуста!!!
Хочу использовать ServerSocket & ClientSocket
Как установить между ними связь Кто должен находится у юзера а кто у Админа, и как сделать чтобы при посылании Админом на юзерскую машину букву, у юзера выполнялось какое-то действие,
при чем хочу чтобы это происходило моментально только послал, как у юзера начинает выполняться запланированное действие
????????????????????????????????????????????????????????????

Я пробовал Client стоит у Админа, а Server у юзера но действие начинает происходить только после двойного нажатия на кнопку....

Жду помощи!


Malder   (2002-08-31 16:51:00) [1]

Странный вопрос...

у тебя же есть код:

if Socket.ReceiveText ="R" then
ExitWindowsEx(EWX_SHUTDOWN,0);


Так почемы бы не написать edit1.ext:=Socket.ReceiveText;
?


dr.karter   (2002-08-31 16:23:00) [2]

Огромное СПАСИБО!
А не могли бы вы мне объяснить как допустим я могу фразы и тексты пересылать с помощью Socket"oв. А потом читать их в Memo
или Edit"е
??????????????????????????


VID   (2002-08-31 15:35:00) [3]

To dr. karter:
Согласен со словами агента :)
Поверни всё на 180 градусов :)


Malder   (2002-08-31 13:52:00) [4]

dr.karter, логика у тебя немного неправильная. Timon же тебе советовал алгоритм с правильной логикой. У тебя админ САМ коннектиться к серверу. А п идее логичнее было бы у админа установить сервер, а клиенты ClientSocket"ом к нему коннектятся. Вот тогда пригодилось бы ServerSocket.Socket.Connections


dr.karter   (2002-08-31 13:11:00) [5]

Ясно! Спасибо! Сяду попробую.
А вот Timon мне советовал что это за фишкаи как ей пользоваться? Объясни пожалуста.


> Сервер лучше у админа, а дальше просто. Используй св-во
> tServerSocket.Socket.Connections и tCustomWinSocket.SendBuff.
> Скорость работы зависит от загруженности сервера и скорости
> машины.


VID   (2002-08-31 12:52:00) [6]

У админа пусть будет три кнопки:
1. Открыть сокет. КОД:
Client.Host := Edit1.Text;
Client.Active := true;

2. Отправить команду. КОД:
Client.Socket.SendText ("R");

3. Закрыть сокет. КОД:
Client.Close;

Основная идея: клиент не должен отправлять какой-либо пакет сразу же после установки его св-ва Active := true, т.е. если Active = true это ещё не значит что связь с сервером установлена и пакет дойдёт до сервера.

Тоже самое и относительно того, что не стоит сразу же после вызова метода SendText (), деактивировать клиента, т.к. нет гарантии, что текст будет отправлен на сервер, до того как будет закрыт клиентский сокет.


dr.karter   (2002-08-31 11:32:00) [7]



> И ещё : не стоит сразу после оправки текста (Client.SendText)
> деактивировать клиента... лучше деактивировать (как и активировать),
> его при нажатии спец. кнопки.

Дело в том что нажатие на эту кнопку происходит несколько раз в день. не выходя из проги. А чем это влияет? Когда я сразу после отправки закрываю коннект или опосля?


dr.karter   (2002-08-31 11:22:00) [8]

Получается так, что мне приходится нажимать на кнопочку два раза
только потом у юзера происходит действия! вот


VID   (2002-08-31 01:21:00) [9]

У тебя какой-то троянец "наоборот" получился :)
Может лучше у юзера будет клиентская часть ? При запуске она автоматически поключается к серверу, и готова принимать от него команды.

Хотя твой вариант тоже интересен..

Вобщем, в событии Form1.Create перед строчкой
Server.Active := true, напиши Server.Port := 1060;
Перед активацией клиента, тоже укажи порт 1060... хотя вполне возможно что они уже были указаны в дизайн-тайме...
И ещё : не стоит сразу после оправки текста (Client.SendText) деактивировать клиента... лучше деактивировать (как и активировать), его при нажатии спец. кнопки.

А в чём собственно проблема ? Что не получается-то ?


dr.karter   (2002-08-30 16:51:00) [10]

У Админа:
procedure TForm1.Button1Click(Sender: TObject);
begin
timer1.Enable:=True;
ClientSocket1.Host:=Edit1.Text;
ClientSocket1.Active:=true;
ClientSocket1.Socket.SendText("R");
ClientSocket1.Active:=false;
end;



Это у юзера :
procedure TForm1.FormCreate(Sender: TObject; var Action: TCloseAction);
begin
ServerSocket1.Active:=TRUE;
end;


procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
if Socket.ReceiveText ="R" then
ExitWindowsEx(EWX_SHUTDOWN,0);
end;



procedure TForm1.FormDistroy(Sender: TObject; var Action: TCloseAction);
begin
ServerSocket1.Active:=false;
end;


Вот исходник!


Malder   (2002-08-30 16:12:00) [11]

Аригинальный код !

Выложи исходный код. КОД, который у тебя написан в Delphi.
А не то, как ты себе представляешь работу этого кода...


YouNick   (2002-08-30 16:10:00) [12]

2dr.karter:
Вообще-то мастерок - это строительный инструмент ... Ты не туда обратился!!!!!


dr.karter   (2002-08-30 16:06:00) [13]

Код заключается вот в чем:

Админ нажимает на кнопочку
идет обработка:
Включается таймер для времени;
И должно посылаться сообщение на порт 1060 (предположим) ввиде буковки

А у юзера, в это время работает другая программа
Мне нужно чтобы юзерская тачка шерстила ентот 1060 порт и
если она видит сообщение что было послана какая-то буковка,то
делает неописуемые ниже действия. Так будет понятние? Поможете по текстно?


Malder   (2002-08-30 15:29:00) [14]

Ндааааааа...
и ты хочешь, чтобы тебе кто-то помог ?

Ты бы выложил исходный код сервера и клиента. И сказал в чем проблема...


Timon   (2002-08-30 15:21:00) [15]


Сервер лучше у админа, а дальше просто. Используй св-во tServerSocket.Socket.Connections и tCustomWinSocket.SendBuff. Скорость работы зависит от загруженности сервера и скорости машины.


Наверх

Титульная страница Поиск, карта сайта Написать письмо