Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 09.01.2017
Сообщений: 62
1

Клиент-серверное приложение

05.10.2018, 12:56. Показов 863. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
делаю клиент серверное приложения, у клиента 3 кнопки, у сервера 3 label, как реализовать что бы по нажатию 1 кнопки данные отправились серверу в label 1, с кнопки 2 в label 2 сервера и тд.

клиент
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
var
  Form3: TForm3;
  count:integer;
 
implementation
 
{$R *.dfm}
 
procedure TForm3.clnError(Sender: TObject; Socket: TCustomWinSocket;
  ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
if ErrorEvent= eeConnect
 then
 begin
   ShowMessage('Ошибка соединения. Запустите сервер!');
   ErrorCode :=0;
  end;
end;
 
procedure TForm3.FormCreate(Sender: TObject);
begin
cln.Address :='127.0.0.1'; //для локального соединения
cln.Port :=1100; //такой же как у сервераtry
cln.Open; //открываем соединение с сервером
end;
 
procedure TForm3.Image1Click(Sender: TObject);
begin
count:=count+1;
cln.Socket.SendText(inttostr(count));
end;
 
procedure TForm3.Image2Click(Sender: TObject);
begin
count:=count+1;
cln.Socket.SendText(inttostr(count));
end;
 
end.
сервер
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
procedure TForm1.FormCreate(Sender: TObject);
begin
Srv1.Active :=True;  //запускаем сервер
end;
 
//обрабатываем подключение клиента
procedure TForm1.Srv1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
mmo1.Lines.Add('Подключился клиент с IP адресом '+Socket.RemoteAddress);
end;
 
procedure TForm1.Srv1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
msg:string;
begin
msg :=Socket.ReceiveText;  //читаем сообщение от клиента
label1.Caption:=msg; //выводим его в поле
end;
 
procedure TForm1.Srv1ClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
mmo1.Lines.Add('Клиент '+socket.RemoteAddress+' отключился от сервера.')
end;
 
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.10.2018, 12:56
Ответы с готовыми решениями:

Клиент-серверное приложение. Сервер - ПК, клиент - телефон (Android)
Здравствуйте, решил для обучения написать программу для выключения ПК с телефона, используя...

Клиент серверное приложение
Друзья, осваиваю ServerSocket и ClientSocket. Из прочитанного поняла, что соединение...

Клиент-серверное приложение
Доброго времени суток. Нужно разработать клиент-серверное приложение, но возможно ли использовать...

Клиент-серверное приложение (чат)
Пишу свой чат используючи TServerSocket и TClientSocket. У меня на компютере программа работает...

13
884 / 404 / 174
Регистрация: 20.10.2016
Сообщений: 1,828
05.10.2018, 13:16 2
В чем проблема? В коде все есть. Ставишь кнопку, присваиваешь ей на обработчик OnClick метод Image1Click. Все должно работать. По крайней мере, если остальное сделано правильно.
0
0 / 0 / 0
Регистрация: 09.01.2017
Сообщений: 62
05.10.2018, 16:58  [ТС] 3
дело в том что я когда например посылаю на сервер с первого image значения оно записывается в label 1, а вот со второго image когда передаю значения на сервер оно опять передается label 1, я не могу разделить что бы клиент отправлял с каждой кнопки свое значения на сервер например по клику image1 оправилось 1, по image2 отправилось 1 например но уже на сервере это записалось в label 2
0
0 / 0 / 0
Регистрация: 09.01.2017
Сообщений: 62
05.10.2018, 17:10  [ТС] 4
вот по такому принципу
Миниатюры
Клиент-серверное приложение  
0
884 / 404 / 174
Регистрация: 20.10.2016
Сообщений: 1,828
05.10.2018, 17:45 5
Да тут все просто. Только не сильно имеет отношение к программированию. Просто надо понимать, что сервер не обладает телепатией, поэтому он и не может определить какой компонент послужил инициатором отправки сообщения.

Соответственно, вас надо серверу предоставить эту информацию. И вместо того, чтобы отправлять просто "1", надо отправлять "11", например, где первая цифра будет отвечать за нужный label, а вторая - текст, который в него надо вставлять:

Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.Srv1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
msg:string;
begin
msg :=Socket.ReceiveText;  //читаем сообщение от клиента
case msg[1] of
1: label1.Caption:=msg[2]; //выводим его в поле
2: label2.Caption:=msg[2]; //выводим его в поле
3: label3.Caption:=msg[2]; //выводим его в поле
end;
end;
На самом деле тема обширная, намного более обширная, чем просто нолики и единицы. Почитайте про XML, JSON, CSV. В голове надо держать, что для обработки подойдет любой тип кодирования информации, из которого вы потом сможете получить корректные данные в правильном виде.
0
0 / 0 / 0
Регистрация: 09.01.2017
Сообщений: 62
05.10.2018, 19:35  [ТС] 6
[dcc32 Error] Unit1.pas(53): E2010 Incompatible types: 'Char' and 'Integer' ошибка на 1,2,3 ругается
0
Модератор
9256 / 6034 / 2379
Регистрация: 21.01.2014
Сообщений: 25,797
Записей в блоге: 3
05.10.2018, 20:48 7
Или так...
Delphi
1
2
3
4
5
case msg[1] of
'1': label1.Caption:=msg[2]; //выводим его в поле
'2': label2.Caption:=msg[2]; //выводим его в поле
'3': label3.Caption:=msg[2]; //выводим его в поле
end;
или так
Delphi
1
2
3
4
5
case StrToInt(msg[1]) of
1: label1.Caption:=msg[2]; //выводим его в поле
2: label2.Caption:=msg[2]; //выводим его в поле
3: label3.Caption:=msg[2]; //выводим его в поле
end;
0
0 / 0 / 0
Регистрация: 09.01.2017
Сообщений: 62
05.10.2018, 21:12  [ТС] 8
ошибки нет но по нажатию в клиенте на сервере начинают просто исчезать label

Добавлено через 14 минут
ошибки нет но по нажатию в клиенте на сервере начинают просто исчезать label
0
0 / 0 / 0
Регистрация: 09.01.2017
Сообщений: 62
05.10.2018, 23:30  [ТС] 9
получиться должно типа этого
Миниатюры
Клиент-серверное приложение  
0
884 / 404 / 174
Регистрация: 20.10.2016
Сообщений: 1,828
06.10.2018, 18:40 10
Потому что в клиенте надо кроме цифры с количеством отзывов отправлять ещё и число, которое указывает тип отзыва.
0
0 / 0 / 0
Регистрация: 09.01.2017
Сообщений: 62
06.10.2018, 18:54  [ТС] 11
а по конкретнее, код можно сам не догоняю, учусь только, если не сложно
0
884 / 404 / 174
Регистрация: 20.10.2016
Сообщений: 1,828
07.10.2018, 14:34 12
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm3.Image1Click(Sender: TObject);
begin
count:=count+1;
cln.Socket.SendText('1'+inttostr(count));
end;
 
procedure TForm3.Image2Click(Sender: TObject);
begin
count:=count+1;
cln.Socket.SendText('2'+inttostr(count));
end;
0
0 / 0 / 0
Регистрация: 09.01.2017
Сообщений: 62
07.10.2018, 15:21  [ТС] 13
работает, но не полностью, например 5 раз нажал на первую картинку на сервере 5 записалось, но когда нажимаю на вторую картинку на сервер передается не 1 во label2, а сразу 6, а когда до 10 доходит, все тормозит на месте дальше не считает
0
Nanotentacle
07.10.2018, 16:40     Клиент-серверное приложение
  #14

Не по теме:

Позвольте вопрос: а кто автор кода из первого поста?

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.10.2018, 16:40

Клиент-серверное приложение.нахождение количества букв в словах
Здравствуйте. Помогите с приложением, как можно описать метод нахождения общего количества букв в...

локальное и клиент-серверное приложения
можно ли из локального приложения сделать клиент-серверное? если да, то как?

Клиент-Серверное приложение. Как сделать, чтобы сервер сам отправлял сообщения на клиент
Добрый день всем. Проблема заключается в следующем: Есть клиент-серверное приложение, хочу...

Клиент-серверное приложение: как определить, что сервер/клиент не отвечает в течении определенного времени
Пишу клиент-серверное приложение. Использую TCPListener и TCPClient. Вопрос: как определить что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru