Вверх ↑
Этот топик читают: Гость
Ответов: 1841
Рейтинг: 369
#16: 2011-04-20 13:24:57 ЛС | профиль | цитата
LastLeader, не совсем понятно что у Вас
LastLeader писал(а):
не работает
...
карма: 1
0
Ответов: 3889
Рейтинг: 362
#17: 2011-04-20 13:57:37 ЛС | профиль | цитата
LastLeader, Давайте вернёмся к истокам и попробуем по шагам, вот (как обычно, немного ламерский)) ) пример сбора самых разных данных с помощью несколько нестандартного применения ChanelToIndex с последующей упаковкой в поток и засылкой с клиента на сервер. Подавайте любые данные на его точки, в любом порядке. С другой стороны сетевого канала, на выходах IndexToChanel, на соответствующих по номеру событиях будут появляться готовые потоки с Вашими данными в нужном (исходном) виде. (изменения в схему буду вносить тут, если что)


Add(ScrollBar,5133325,140,224)
{
Left=10
Top=70
link(onPosition,12524206:doWork1,[(226,230)(226,237)])
}
Add(MainForm,15673233,322,518)
{
Left=21
Top=106
Width=131
Height=135
Position=1
link(onCreate,9973059:doEvent1,[])
}
Add(StreamPack,14434465,378,280)
{
DataCount=#10:тип данных|6:данные|0:|
link(onPack,7240964:doSend,[])
link(данные,12524206:Data,[(391,268)(367,268)(367,323)(307,323)])
}
Add(StreamUnPack,13235102,525,364)
{
DataCount=#10:тип данных|6:данные|0:|
link(onUnPack,4233687:doEvent,[])
}
Add(TCP_Server,6739532,476,364)
{
Port=777
DataType=3
link(onRead,13235102:doUnPack,[])
}
Add(TCP_Client,7240964,469,266)
{
Port=777
IP="127.0.0.1"
DataType=3
}
Add(Hub,9973059,392,532)
{
link(onEvent1,6739532:doOpen,[(427,538)(427,370)])
link(onEvent2,7240964:doOpen,[(438,545)(438,272)])
}
Add(IndexToChanel,4233687,581,364)
{
Count=1
Point(Index)
Point(Data)
link(onEvent1,15367893:doPosition,[])
link(Index,13235102:тип данных,[(587,352)(572,352)(572,419)(531,419)])
link(Data,13235102:данные,[(594,347)(566,347)(566,415)(538,415)])
}
Add(ChanelToIndex,12524206,301,231)
{
Count=1
Point(Data)
link(onIndex,14434465:doPack,[(355,237)(355,286)])
}
Add(ScrollBar,15367893,644,364)
{
Left=10
Top=5
}
Add(InfoTip,3334499,91,168)
{
Info=#16:КЛИЕНТСКАЯ ЧАСТЬ|
Width=421
Height=165
}
Add(InfoTip,5126449,259,343)
{
Info=#15:СЕРВЕРНАЯ ЧАСТЬ|
Width=484
Height=137
}





У меня всё работает,на localhost, какая у Вас сеть и качество соединения - учитывайте сами. Пока читаю ветку, можете задавать вопросы по схеме.
------------ Дoбавленo в 13.40:
Кстати, если у Вас только текст кнопок, Вам вообще эти потоки нужны? Может тип данных в клиентесервере dtString установите, упростив себе жизнь и отладку?
------------ Дoбавленo в 13.57:
Глядите, как Вам такой суперсложный пример (обратите внимание на тип данных сетевых компонент):


Add(MainForm,8565467,287,518)
{
Left=21
Top=106
Width=197
Height=83
Position=1
link(onCreate,9973059:doEvent1,[])
}
Add(TCP_Server,6739532,441,364)
{
Port=777
link(onRead,12016071:doCaption,[])
}
Add(TCP_Client,7240964,434,266)
{
Port=777
IP="127.0.0.1"
}
Add(Hub,9973059,357,532)
{
link(onEvent1,6739532:doOpen,[(392,538)(392,370)])
link(onEvent2,7240964:doOpen,[(403,545)(403,272)])
}
Add(InfoTip,3334499,322,168)
{
Info=#16:КЛИЕНТСКАЯ ЧАСТЬ|
Width=155
Height=165
}
Add(InfoTip,5126449,378,343)
{
Info=#15:СЕРВЕРНАЯ ЧАСТЬ|
Width=197
Height=137
}
Add(Edit,4072811,343,280)
{
Width=180
Text="Печатать тут"
link(onChange,7240964:doSend,[])
}
Add(Button,12016071,532,364)
{
Top=25
Width=180
Point(doCaption)
}


карма: 1

0
Ответов: 316
Рейтинг: 21
#18: 2011-04-21 00:34:25 ЛС | профиль | цитата
Делаю управление устройством через сеть.
Серверная часть весит на ком порте слушает порт и высылает название 5 клавиш клиентам
http://laba.wet.in.ua/sites/default/files/Server.sha
Клиенты могут пробится к серверу через локалку и через интернет. в зависимости вы на работе или дома в частной сети.
Пароли сейчас высылает отправляет команды устройству а вот на клавиши прислать текст так и не получается
http://laba.wet.in.ua/sites/default/files/Tray_New.sha
карма: 1

0
Ответов: 3889
Рейтинг: 362
#19: 2011-04-21 08:50:05 ЛС | профиль | цитата
Мой последний пример видели? На крайний случай отдельный порт под клиентсервер, настроенные на текстовые данные, т.к. динамически тип не переключить, а с потоками у Вас, говорите, какая-то проблема.

А вообще Вы бы сделали одну маленькую схему, по примеру моих. Клиент и сервер на одном поле, связь через localhost. Оставьте ТОЛЬКО то, что "не работает", там явно не более десятка элементов будет.
------------ Дoбавленo в 08.50:
Попробовал разобраться у Вас там (клиент 291 элемент, сервер 724 ), нет, уж будьте добры, только "нерабочий" кусок в студию. Цепочкой из одиночных элементов: одна кнопка, один дешифратор индекса в канал, один распаковщик потока, один TCP клиент, один сервер, один упаковщик... ну, Вы поняли. Не исключаю, что в процессе упрощения Вы и сами найдёте свою ошибку. Я догадываюсь, в чём она, но пока подожду более адекватного примера Вашего кода.
карма: 1

0
Ответов: 4641
Рейтинг: 334
#20: 2011-04-21 10:49:05 ЛС | профиль | цитата
1nd1g0, [flood]
1nd1g0 писал(а):
более адекватного примера Вашего кода.

и это правильно. Есть такая группа пользователей, которые даже не смотрят примеры как примеры. Им подавай законченное приложение. А разговорчики что то нерабоатет или еще что то это такая завуалированная просьба сделать все за него. Я могу и ошибаться но в большинстве случаев именно так.
1nd1g0, я сам так делаю. даю только примеры и намеки (если это действительно простая задача) или объясняю на пальцах, дабы дать возможность человеку додуматься до чего нибудь самому.[/flood]
карма: 1
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 3889
Рейтинг: 362
#21: 2011-04-21 11:21:04 ЛС | профиль | цитата
Ravilr,
[flood]На себе уже проверил, когда сам не заметил, как за человека двупанельный браузер написал при том, что это была вообще вторая моя в жизни программа на HiAsm и я даже СЕБЕ никогда ещё ничего не "конструировал")) Судя по более чем 1000 компонентов в сумме, LastLeader хотя бы не такой ленивый, но я намеренно подправил сообщение и удалил все мои замечания к его коду, не соответствующие топику, вот по сетевому коду - пожалуйста, даст свой пример, если правда не работает, поправлю в меру своих сил.

Что характерно, мне никто не задаёт вопросов по схеме, зачем там какой элемент, что как работает, копируют и пристраивают в меру своего понимания молча)[/flood]
карма: 1

1
Голосовали:LastLeader
Ответов: 316
Рейтинг: 21
#22: 2011-04-22 01:11:14 ЛС | профиль | цитата
А как можно организовать вот такое?
Или что-то наподобие, может не с потоками а с вставкой инфы или на кабелях?
code_23455.txt
Делал маленькие схемки они работают))) А большая не хочет
[flood]
1nd1g0 писал(а):
LastLeader хотя бы не такой ленивый
Ленивый еще какой))) Такой ленивый что хочу все автоматизировать и чтоб все за меня делала электроника К сожалению из за своей лени я постоянно работаю, чтоб ее реализовать хотя бы к концу жизни [/flood]

карма: 1

0
файлы: 1code_23455.txt [956B] [117]
Разработчик
Ответов: 26170
Рейтинг: 2127
#23: 2011-04-22 01:22:30 ЛС | профиль | цитата
LastLeader, через TCP можно проборсить только непрерывные бинарные даные, MT поток -- это не непрерывные бинарные данные, а цепочка разнородных данных, находящихся в разных участках памяти. Пробросить их черех TCP можно только превратив MT-поток в непрерывные бинарные данные (Stream или ASCII String). Кабель -- это виртуальный хаб, те, это вообще не данные, а последовательность событий, для наглядности показанные как одна линия
карма: 22

0
Ответов: 316
Рейтинг: 21
#24: 2011-04-22 01:39:45 ЛС | профиль | цитата
Вот что мне нужно было Всех благодарю за помощь!!!!!!!!!!!!!!
code_23456.txt
карма: 1

0
файлы: 1code_23456.txt [2.1KB] [104]
Разработчик
Ответов: 26170
Рейтинг: 2127
#25: 2011-04-22 01:41:45 ЛС | профиль | цитата
LastLeader писал(а):
Вот что мне нужно было

Но подобие этого тебе и приводил 1nd1g0 несколькими постами выше
карма: 22

0
Ответов: 316
Рейтинг: 21
#26: 2011-04-22 02:11:37 ЛС | профиль | цитата
nesco писал(а):
Но подобие этого тебе и приводил 1nd1g0 несколькими постами выше

1nd1g0 - Особая благодарность Я его пример и взял за основу
карма: 1

0
Ответов: 3889
Рейтинг: 362
#27: 2011-04-22 08:55:16 ЛС | профиль | цитата
LastLeader, вижу, Вам понравилась упаковка в поток. В случае с большим количеством однотипных данных это проще и надёжнее, чем делать перебор и слать по отдельным входам шифратора. Шифратор (ChanelToIndex) я приводил в пример асинхронной последовательно-поочерёдной связи, когда на любой вход в неизвестный момент может поступить одно событие с данными в потоке. Если у Вас фиксированное число параметров при каждой передаче,то шифрациюдешифрацию вообще можно убрать, пример "параллельной", синхронной связи с передачей разных данных одним пакетом после объединения, количество и типы данных заданы жёстко:

code_23459.txt
------------ Дoбавленo в 08.55:
Я тут вспомнил, что у Вас при выборе сервера применяется сразу несколько элементов PING. Мне кажется, в этом нет необходимости, больше недостатков. Во-первых, пинги расставлены у вас в основном потоке (main thread) приложения, и оно может заметно "подвисать" на таймауты при плохой связи. Во-вторых, пинг (протокол ICMP) может (не редкость) быть заблокированутрачен на NAT, маршрутизаторах, файерволах и разных проактивных защитах. Ну, и в третьих, TCP_client уже имеет события onError (не реализовано) onConnect и onDisconnect, позволяющие сделать выводы о пропадании связи с сервером и переключиться на следующий по списку. Ещё одним плюсом onDisconnect является оперативная реакция на пропаданиеразрыв связи, в отличие от однократного PING, который был у Вас в схеме. Даже если PING вызывать регулярно, при плохой связи он будет лишь подтормаживать приложение, пока делает вывод о доступности сервера. А при особо плохой связи, получив превышение таймаута и не дождавшись ответа, который порой идёт ОЧЕНЬ долго (классический пример - некачественный региональный "мобильный интернет"), он сделает выводы неверно и программа по Вашей схеме вообще уйдёт пинговать альтернативный сервер в ИнтернетLAN, то есть потратит некоторое время не работая. Удачи в сетевом программировании)
карма: 1

0
файлы: 1code_23459.txt [1.6KB] [108]
Ответов: 3349
Рейтинг: 233
#28: 2011-04-22 19:50:56 ЛС | профиль | цитата
1nd1g0 писал(а):
onError

Это то, которое не работает(оно закоментированно)?
карма: 1

1
Голосовали:1nd1g0
Ответов: 3889
Рейтинг: 362
#29: 2011-04-22 20:16:17 ЛС | профиль | цитата
Ivann, спасибо за науку Действительно, посмотрел в hiTCP_Client.pas , так сказать, "вывод микросхемы не используется", то есть что вешаю на неё, что нет, если бы ошибка правда произошла, не заметил бы
LastLeader, тогда идём от обратного, используем onConnect (подсуетился, посмотрел, она скомпилируется нормально), отсутствие которого скажет нам о возможных проблемах с сервером, однако от подвисания это нас не сильно избавит, более того, если сервер не ответит, то событие так и не произойдёт, а значит, придётся реализовывать перебор серверов отдельным потоком или по независимому таймеру.
карма: 1

0
Ответов: 316
Рейтинг: 21
#30: 2011-04-22 22:33:10 ЛС | профиль | цитата
Поменял сервер и клиент местами для соответствия и поровнял связи. Может кому пример сгодится.
code_23464.txt

Да пинг иногда глючит, просто до него руки еще не дошли.
карма: 1

0
файлы: 1code_23464.txt [2KB] [118]
Сообщение
...
Прикрепленные файлы
(файлы не залиты)