Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2013, 22:02   #1
FlipOK
Новичок
Джуниор
 
Регистрация: 05.01.2013
Сообщений: 2
Печаль Server/Client на Delphi

Парни помогите пожалуйста с заданием по курсовой. Препод дал задание такое:
Сумма двух векторов.
С сервера препод задает координаты двух векторов. Отсылает их 3м машинам(клиентам) они складывают, векторы, и отсылают результаты на сервер.
Все это на форме, а не консоль.

С кодом суммы векторов я разобрался, а вот с другим нет. 6 дней сижу вообще ни что не получается))

Желательно до завтра(
FlipOK вне форума Ответить с цитированием
Старый 05.01.2013, 22:44   #2
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

заклвдка indy можно взять IdTCPServer/Client примеры использования можно нагуглить или найти тут на форуме..по моему нику..я выкладывал.
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 06.01.2013, 00:31   #3
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

Вкладка Internet компоненты ClientSocket и ServerSocket
тыкаем их на форму, тыкаем кнопочку СтартСервер и тыкаем какое нить текстовое поле в котором будем писать на каком порту работает сервер.
итак чтобы сервер стартовал надо сделать так:
Код:
ServerSocket1.port:=StrToIntDef(edit1.text,5000);
ServerSocket1.Active:=true;
теперь клиент
ему надо два текстовых поля в одном будет IP сервера а во втором порт на котором работает сервак и кнопочку старта клиента в которой пишем примерно это:
Код:
ClientSocket1.Host:=edit2.text;
ClientSocket1.Port:=StrToIntDef(edit3.text,5000);
ClientSocket1.Active:=true;
ну вот и воуоля соединение установлено.
теперь надо научиться обмениваться сообщениями.
Итак я понял что надо отсылать два вектора а вектор это четыре числа (пусть будут целыми)
тогда создаем тип данных типа два вектора
Код:
type Ttwovector=record
a1:Tpoint;
b1:Tpoint;
a2:Tpoint;
b2:Tpoint;
end;
Собственно говоря переменные этого типа данных и будем передавать от сервака к клиентам.
Создаем кнопочку по клику на которую будем отсылать векторы с сервака и пишем примерно следующее:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var vect:Ttwovector;
i:integer;
begin
....
//тут каким то образом препод заносит данные в переменную vect
...

for i:=0 to ServerSocket1.Socket.ActiveConnections do
begin
 ServerSocket1.Socket.Connections[i].SendBuf(vect,32);
end;
end;
число 32 - это размер пакета в байтах. в данном случае это 4 пары целых чисел каждое из которых занимает по 4 байта
4*2*4=32
теперь задача клиента принять пакет
тыкаем на иконку клиента на форме и выбираем event вкладку и ищем там onRead событие и там будем пытаться принять пакет от сервера
Код:
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var vect:Ttwovector;
begin
socket.ReceiveBuf(vect,32);//читаем из буфера 32 байта в переменную vect

...
//а дальше делайте с этой переменной то, что хотите

end;
PS по умолчанию эти компоненты отключены но они поставляются вмести с Delphi
Component->Install Packages->Add
и в появившемся окне открываем папку bin там где лежат файлики самой delphi и ищем вот такой пакет dclsockets70.bpl ставим его и на вкладочке Internet они появляются.
Все. если что не понятно разжовано то это уже во фриланс вам
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 06.01.2013, 15:48   #4
FlipOK
Новичок
Джуниор
 
Регистрация: 05.01.2013
Сообщений: 2
Радость

Спасибо большое!!!! Простите конечно, у меня еще вопросик.
Как с клиента, результат, отправить на сервер, а на сервере вывелся результат?
FlipOK вне форума Ответить с цитированием
Старый 07.01.2013, 17:34   #5
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

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

создаем кнопку на клиенте "отправить сообщение"
мы знаем что сумма двух векторов это тоже какой то вектор. так что в принципе можно использовать тот же самый тип данных Ttwovector, правда этот тип данных описывает два вектора, ну и ладно пусть второй вектор остается пустым...

допустим вы вычислили результат и записали его в клиенте в переменную resvect которая является Ttwovector типом
итак во вновь созданной кнопке пишем примерно следующее
Код:
ClientSocket1.Socket.SendBuf(resvect,32);
число 32 думаю понятно откуда взялось из предыдущего моего поста.
использовано из них будет 16 байт, остальные пустые...

теперь сервер должен принять переданное от какогото клиента результат.
на сервере тоже создадим переменную resvect и примем в нее результат по событию сервера onClientRead
Код:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var resvect:Ttwovector;
begin
 Socket.ReceiveBuf(resvet,32);//читаем результат
...//делаем что хотим с результатом
end;
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Winsock Client Server fucil Работа с сетью в Delphi 10 06.09.2012 00:37
Доработка Client-Server werrey Работа с сетью в Delphi 5 03.09.2011 20:51
Server-Client приложения Яшар Общие вопросы Delphi 4 20.06.2011 12:10
[c++] Client-Server: GET request refused by the server Pumych Помощь студентам 2 22.08.2010 23:36
Client и Server Роман Радер Работа с сетью в Delphi 11 10.07.2008 15:24