Вверх ↑
Этот топик читают: Гость
Ответов: 542
Рейтинг: 12
#1: 2009-01-10 22:53:38 ЛС | профиль | цитата
Вот поюзал hiAsm, посмотрел примеры из пакета, почитал форам правда не весь
и в дальнейшем буду следить за всеми сообщениями форума что бы по быстрее освоить этот конструктор на все ~100%

До того как нашел hiAsm в инете писал клиент-серверное приложение, где клиентская часть почти была завершена. А теперь появилось желанию бросить все и начать с начала но в hiAsm. Это будет моя первая программа в hiAsm и надеюсь не последняя.

Поэтому походу работы с вашего позволения будут писать в эту ветку о всех попутных проблемах с надеждой что вы найдете время направляет меня на правильные решения.

Суть задачи такова:
1) клиент по порту 534 обращается к удаленному серверу и передает свой ID и пароль
2) Сервер после идентификации клиента, передает ему таблицу (прайс) и свое базы данных.
3) На клиентском приложении оператор в прайсе указывает количество заказываемого товара в каждой строчке и отсылает на сервер.
4) Сервер сохраняет в свою базу таблицу заказ с привязкой к дате и ID клиента.

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

Буду благодарен за любые напутствия или примеры исходников похожих приложении


Мое первая разработка в HiAsm клиент-серверное приложение

карма: 0

1
Голосовали:EcsTasY
Ответов: 590
Рейтинг: 19
#2: 2009-01-10 23:14:11 ЛС | профиль | цитата
afandi писал(а):
Чуть не забыл отметить что клиентов может быть несколько десятков и даже может быть что подключаются одновременно.

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

карма: 0

0
Ответов: 387
Рейтинг: 34
#3: 2009-01-10 23:20:16 ЛС | профиль | цитата
afandi писал(а):
передает свой ID и пароль

мне говорили что некоторые протоколы могут отдать адреса обращений и пароли с логинами программам sniffer-ам
карма: 0

0
Ответов: 542
Рейтинг: 12
#4: 2009-01-11 00:18:12 ЛС | профиль | цитата
Karl писал(а):
пароли с логинами программам sniffer-ам

Говоря об умалчивании деталей я подразумевал и такие нюансы. но это сейчась не суть важно.
важно мне научится и научится на реальном примере т.е. задаче
------------ Дoбавленo:

Смотрел пример TCP_ServerEx в не совсем понятно как его использовать и где мне хотя бы порт указать. Да и точек у этого "макро" компонента мало.

------------ Дoбавленo:

Вот что сборка клиентской стороны, не могу разобратся как объединить в один поток ID и пароль и передать как данные на сервер


Add(MainForm,2953706,21,105)
{
Width=550
Height=403
}
Add(Menu,15478480,70,140)
{
Menu=#14:Получить прайс|15:Отправить прайсс|
Point(onSelectNum)
link(onSelectNum,13034002:doEvent,[])
}
Add(IndexToChanel,13034002,119,147)
{
Count=4
link(onEvent1,16000270:doEvent1,[])
}
Add(Edit,6976912,336,70)
{
Left=450
Top=10
Text="534"
DataType=1
}
Add(Edit,7962037,133,63)
{
Left=95
Top=10
Text="afandi"
}
Add(Label,4920964,133,21)
{
Left=75
Top=15
Width=15
Height=17
Caption="ID"
}
Add(Label,7181043,181,21)
{
Left=165
Top=13
Height=17
Caption="Password"
}
Add(Label,10621713,336,28)
{
Left=416
Top=13
Width=23
Height=17
Caption="Port"
}
Add(Edit,3325293,175,63)
{
Left=220
Top=11
Text="pswd"
}
Add(EventFromData,6418955,126,224)
{
}
Add(TCP_Client,3892390,294,140)
{
link(IP,788135:Text,[(300,117)(296,117)])
link(Port,6976912:Text,[(314,117)(342,117)])
}
Add(Label,2044784,290,28)
{
Left=291
Top=13
Width=35
Height=17
Caption="Server"
}
Add(Edit,788135,290,70)
{
Left=331
Top=13
Width=70
Text="127.0.0.1"
}
Add(Hub,16000270,203,147)
{
OutCount=3
link(onEvent1,3892390:doOpen,[(265,153)(265,146)])
link(onEvent2,3892390:doSend,[])
link(onEvent3,4203426:doAdd,[(265,167)(265,195)])
}
Add(DoData,5348962,189,231)
{
}
Add(Memo,4203426,294,189)
{
Left=55
Top=95
Width=395
Height=245
link(Str,3892390:Active,[])
}
Add(Label,7071050,28,21)
{
Left=55
Top=75
Width=74
Height=17
Caption="log from debug"
}

карма: 0

0
Ответов: 590
Рейтинг: 19
#5: 2009-01-11 00:34:53 ЛС | профиль | цитата
ошибку твоя схема выдает.. ты каким компилятором пользуешся?
карма: 0

0
Ответов: 542
Рейтинг: 12
#6: 2009-01-11 00:35:51 ЛС | профиль | цитата
С форума скачал delphi компилятор
карма: 0

0
Ответов: 590
Рейтинг: 19
#7: 2009-01-11 00:38:52 ЛС | профиль | цитата
afandi писал(а):
как объединить в один поток ID и пароль

code_11316.txt
в принципе так
------------ Дoбавленo:

afandi писал(а):
С форума скачал delphi компилятор

а ты сменил FPC на Delphi при компиляции?
карма: 0

0
файлы: 1code_11316.txt [695B] [157]
Ответов: 542
Рейтинг: 12
#8: 2009-01-11 00:52:12 ЛС | профиль | цитата
Я оставил галочку только на компиляторе delphi так как с FPC компилятором менюшка не получалась
------------ Дoбавленo:

Скиньте пожалуйста схемку сервера заглушик которая все что падает на порт 534 выводит в memo поле
карма: 0

0
Ответов: 3851
Рейтинг: 159
#9: 2009-01-11 00:53:08 ЛС | профиль | цитата
afandi писал(а):
Смотрел пример TCP_ServerEx в не совсем понятно как его использовать и где мне хотя бы порт указать. Да и точек у этого "макро" компонента мало.
однако лучше него для указанных задач наверное не найти..
TCP_ServerEx это контейнер, который может работать в динамическом режиме (подробнее об этом режиме см справку по F1 для MultiElementEx code_11317.txt), порт указывается в свойствах..
карма: 0
начавший
0
файлы: 1code_11317.txt [107B] [185]
Ответов: 542
Рейтинг: 12
#10: 2009-01-11 02:38:59 ЛС | профиль | цитата
Прочитал справку про MultiElementEx пример из описания лучще текстового описания помогло понять для чего служить компонент MultiElementEx.
Но мне пока просто собрать собрать серверную часть которая все что падает на порт 534 печатает в текстовое поле для тестирования клиентской части.
может кто подбросить примерчик
------------ Дoбавленo:

С вашей помощю разобрался как передать на сервер строку текста и обработать на стороне сервера эту строку.
Тепер вопрос как строку т.е. данные перед передачей на сервер шифровать (защита от сниферов) и как на стороне сервера расшифровать принятие данные?
карма: 0

0
Ответов: 590
Рейтинг: 19
#11: 2009-01-11 02:42:15 ЛС | профиль | цитата
Ты бы "каркас" схемы дал, а я попробую защиту от сниферов сделать
карма: 0

0
Ответов: 542
Рейтинг: 12
#12: 2009-01-11 02:45:26 ЛС | профиль | цитата
Клиент
code_11320.txt

Сервер

code_11321.txt
карма: 0

0
файлы: 2code_11320.txt [1.8KB] [149], code_11321.txt [746B] [143]
Ответов: 590
Рейтинг: 19
#13: 2009-01-11 02:58:51 ЛС | профиль | цитата
Я не знаю где используеться конвертер win -> base64 , но с помощью него получилось не плохо зашифровать... интересно даж стало...
code_11322.txt
------------ Дoбавленo:

Сервер

Add(MainForm,44932,84,91)
{
Width=219
Height=305
Point(onClose)
link(onCreate,3363318:doOpen,[])
link(onClose,3363318:doClose,[])
}
Add(TCP_Server,3363318,189,105)
{
Port=534
link(onRead,10028629:doEvent1,[])
link(onConnect,7441850:doAdd,[(243,118)(243,195)])
}
Add(ListBox,7441850,266,189)
{
Left=10
Top=60
Width=185
Height=200
}
Add(StrPart,4941184,350,112)
{
Char=";"
link(onSplit,11263676:doText,[])
link(onPart,1531600:doText,[(432,125)(432,153)])
}
Add(Edit,1531600,462,147)
{
Left=10
Top=10
Width=185
}
Add(Edit,11263676,462,112)
{
Left=10
Top=35
Width=185
}
Add(Charset,7860795,294,112)
{
Type=4
link(onCharset,4941184:doSplit,[])
link(Text,16440180:GetData,[])
}
Add(Hub,10028629,259,105)
{
link(onEvent1,16440180:doData,[(283,111)(283,62)])
link(onEvent2,7860795:doCharset,[])
}
Add(EventFromData,16440180,294,56)
{
}

Клиент

Add(Menu,15478480,168,287)
{
Menu=#14:Получить прайс|15:Отправить прайс|
Point(onSelectNum)
link(onSelectNum,13034002:doEvent,[])
}
Add(IndexToChanel,13034002,217,294)
{
Count=4
link(onEvent1,16000270:doEvent1,[])
}
Add(Edit,6976912,469,245)
{
Left=355
Top=10
Text="534"
DataType=1
}
Add(Edit,7962037,273,126)
{
Left=30
Top=10
Text="afandi"
}
Add(Label,4920964,231,63)
{
Left=10
Top=15
Width=15
Height=17
Caption="ID"
}
Add(Label,7181043,273,63)
{
Left=90
Top=13
Height=17
Caption="Password"
}
Add(Label,10621713,315,63)
{
Left=321
Top=13
Width=23
Height=17
Caption="Port"
}
Add(Edit,3325293,322,126)
{
Left=145
Top=11
Text="pswd"
}
Add(TCP_Client,3892390,413,301)
{
Port=534
IP="127.0.0.1"
link(IP,788135:Text,[(419,286)(377,286)])
link(Data,8659398:Value,[])
link(Port,6976912:Text,[(433,289)(475,289)])
}
Add(Label,2044784,189,63)
{
Left=201
Top=13
Width=35
Height=17
Caption="Server"
}
Add(Edit,788135,371,245)
{
Left=241
Top=13
Width=70
Text="127.0.0.1"
}
Add(Hub,16000270,266,294)
{
OutCount=4
link(onEvent1,10234635:doString,[(310,300)(310,195)])
link(onEvent2,3892390:doOpen,[])
link(onEvent3,3892390:doSend,[(400,314)(400,321)])
link(onEvent4,4203426:doAdd,[(346,321)(346,377)])
}
Add(Memo,4203426,413,371)
{
Left=10
Top=60
Width=395
Height=245
link(Str,3892390:Active,[])
}
Add(Label,7071050,147,63)
{
Left=10
Top=40
Width=74
Height=17
Caption="log from debug"
}
Add(FormatStr,10234635,315,189)
{
Mask="%1;%2"
Point(FString)
link(onFString,7860795:doCharset,[])
link(Str1,7962037:Text,[(321,173)(279,173)])
link(Str2,3325293:Text,[])
}
Add(MainForm,2953706,56,91)
{
Width=429
Height=355
}
Add(Charset,7860795,371,189)
{
Type=5
link(onCharset,8659398:doValue,[])
link(Text,10234635:FString,[(377,177)(360,177)(360,229)(321,229)])
}
Add(Memory,8659398,420,189)
{
}
карма: 0

1
файлы: 1code_11322.txt [1KB] [150]
Голосовали:afandi
Ответов: 542
Рейтинг: 12
#14: 2009-01-11 03:10:30 ЛС | профиль | цитата
Для начала пойдет и такая схема, спасибо!
карма: 0

0
Ответов: 590
Рейтинг: 19
#15: 2009-01-11 03:33:36 ЛС | профиль | цитата
Да не за что... хотя... мона было и + поставить
карма: 0

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)