Вверх ↑
Этот топик читают: Гость
Ответов: 1043
Рейтинг: 33
#1: 2013-01-10 19:52:54 ЛС | профиль | цитата
Почему если в этой схеме сервер и клиент вместе, то она работает
Add(Button,5921940,98,126)
{
Left=20
Top=15
Width=75
TabOrder=-1
Caption="Open"
link(onClick,2859817:doOpen,[])
}
Add(Button,823836,98,168)
{
Left=20
Top=40
Width=75
TabOrder=-1
Caption="Close"
link(onClick,638543:doEvent1,[])
}
Add(TCP_Server,2859817,378,126)
{
Port=1001
DataType=3
Point(doCloseAll)
link(onConnect,11389349:doStrCat,[])
}
Add(ListBox,14852958,490,133)
{
Left=120
Top=15
Width=190
Height=145
}
Add(StrCat,11389349,434,133)
{
Str1="Connect: "
link(onStrCat,14852958:doAdd,[])
}
Add(Hub,638543,322,168)
{
link(onEvent1,2859817:doClose,[(343,174)(343,139)])
link(onEvent2,2859817:doCloseAll,[(357,181)(357,153)])
}
Add(Button,7965889,98,224)
{
Left=20
Top=65
Width=75
TabOrder=-1
Caption="SendClient"
Data=String(Massage)
link(onClick,15438237:doValue,[])
}
Add(ZLIB,8458001,301,224)
{
link(onStream,2859817:doSend,[(364,230)(364,146)])
}
Add(StreamPack,11782964,252,224)
{
DataCount=#5:index|4:data|
link(onPack,8458001:doCompress,[])
link(data,15438237:Value,[(265,212)(241,212)(241,269)(153,269)])
}
Add(MainForm,3742575,98,301)
{
Width=544
Height=370
link(onCreate,10931186:doStart,[])
}
Add(TCP_Client,12500207,217,315)
{
Port=1001
IP="127.0.0.1"
DataType=3
link(onRead,15802967:doDeCompress,[])
link(onConnect,10931186:doStop,[(261,328)(261,368)(157,368)(157,328)])
}
Add(Thread,10931186,168,315)
{
Delay=0
link(onExec,12500207:doOpen,[])
}
Add(Message,2796692,476,308)
{
}
Add(ZLIB,15802967,280,308)
{
link(onStream,9227562:doUnPack,[])
}
Add(StreamUnPack,9227562,336,308)
{
DataCount=#5:index|4:data|
link(onUnPack,15654783:doEvent,[])
}
Add(ChanelToIndex,14026521,196,224)
{
Count=3
link(onIndex,11782964:doPack,[])
}
Add(Memory,15438237,147,224)
{
link(onData,14026521:doWork1,[])
}
Add(IndexToChanel,15654783,392,308)
{
Point(Index)
Point(Data)
link(onEvent1,2796692:doMessage,[])
link(Index,9227562:index,[(398,287)(382,287)(382,359)(342,359)])
link(Data,9227562:data,[(405,296)(377,296)(377,352)(349,352)])
}



А если по раздельности, не работает...
Add(Button,5921940,98,126)
{
Left=20
Top=15
Width=75
TabOrder=-1
Caption="Open"
link(onClick,2859817:doOpen,[])
}
Add(Button,823836,98,168)
{
Left=20
Top=40
Width=75
TabOrder=-1
Caption="Close"
link(onClick,638543:doEvent1,[])
}
Add(TCP_Server,2859817,378,126)
{
Port=1001
DataType=3
Point(doCloseAll)
link(onConnect,11389349:doStrCat,[])
}
Add(ListBox,14852958,490,133)
{
Left=120
Top=15
Width=190
Height=145
}
Add(StrCat,11389349,434,133)
{
Str1="Connect: "
link(onStrCat,14852958:doAdd,[])
}
Add(Hub,638543,322,168)
{
link(onEvent1,2859817:doClose,[(343,174)(343,139)])
link(onEvent2,2859817:doCloseAll,[(357,181)(357,153)])
}
Add(Button,7965889,98,224)
{
Left=20
Top=65
Width=75
TabOrder=-1
Caption="SendClient"
Data=String(Massage)
link(onClick,15438237:doValue,[])
}
Add(ZLIB,8458001,301,224)
{
link(onStream,2859817:doSend,[(364,230)(364,146)])
}
Add(StreamPack,11782964,252,224)
{
DataCount=#5:index|4:data|
link(onPack,8458001:doCompress,[])
link(data,15438237:Value,[(265,212)(241,212)(241,269)(153,269)])
}
Add(ChanelToIndex,14026521,196,224)
{
Count=3
link(onIndex,11782964:doPack,[])
}
Add(Memory,15438237,147,224)
{
link(onData,14026521:doWork1,[])
}


Add(MainForm,3742575,98,301)
{
Width=544
Height=370
link(onCreate,10931186:doStart,[])
}
Add(TCP_Client,12500207,217,315)
{
Port=1001
IP="127.0.0.1"
DataType=3
link(onRead,15802967:doDeCompress,[])
link(onConnect,10931186:doStop,[(261,328)(261,368)(157,368)(157,328)])
}
Add(Thread,10931186,168,315)
{
Delay=0
link(onExec,12500207:doOpen,[])
}
Add(Message,2796692,476,308)
{
}
Add(ZLIB,15802967,280,308)
{
link(onStream,9227562:doUnPack,[])
}
Add(StreamUnPack,9227562,336,308)
{
DataCount=#5:index|4:data|
link(onUnPack,15654783:doEvent,[])
}
Add(IndexToChanel,15654783,392,308)
{
Point(Index)
Point(Data)
link(onEvent1,2796692:doMessage,[])
link(Index,9227562:index,[(398,287)(382,287)(382,359)(342,359)])
link(Data,9227562:data,[(405,296)(377,296)(377,352)(349,352)])
}

Если по раздельности, то клиент коннектится, а вот сообщения от сервера уже не принимает
карма: 0

0
Ответов: 189
Рейтинг: 4
#2: 2013-01-10 20:07:38 ЛС | профиль | цитата
Тут какая-то магия с параллельными потоками
code_30023.txt

Так все правильно работает, а если удалить TCP_Server то нет.

ИМХО Скорее всего либо баг, либо tcp не предназначен для мультипотоков, а TCP_Server как-то это это исправляет при инициализации.
карма: 0

1
файлы: 1code_30023.txt [875B] [103]
Голосовали:ashkalov
Ответов: 1043
Рейтинг: 33
#3: 2013-01-10 20:14:01 ЛС | профиль | цитата
KisL()R()[) писал(а):
code_30023.txt

error
------------ Дoбавленo в 20.10:
KisL()R()[) писал(а):
Тут какая-то магия с параллельными потоками

Знаю что в нем дело, но без него визуальные компоненты стопорятся
------------ Дoбавленo в 20.13:
KisL()R()[) писал(а):
tcp не предназначен для мультипотоков

думаю что именно в этом дело
------------ Дoбавленo в 20.14:
KisL()R()[) писал(а):
Так все правильно работает, а если удалить TCP_Server то нет.

магия какая то
карма: 0

0
Ответов: 189
Рейтинг: 4
#4: 2013-01-10 20:15:04 ЛС | профиль | цитата
ashkalov писал(а):
error

Не знаю, у меня все нормально работает.

ashkalov писал(а):
компоненты стопорятся

Выручает эта штука:

Add(Application,8620497,406,154)
{
Wait=1
}


карма: 0

0
Ответов: 1043
Рейтинг: 33
#5: 2013-01-10 20:17:32 ЛС | профиль | цитата
KisL()R()[) писал(а):
Выручает эта штука:

так? если я правильно понял
Add(Button,5921940,98,126)
{
Left=20
Top=15
Width=75
TabOrder=-1
Caption="Open"
link(onClick,2859817:doOpen,[])
}
Add(Button,823836,98,168)
{
Left=20
Top=40
Width=75
TabOrder=-1
Caption="Close"
link(onClick,638543:doEvent1,[])
}
Add(TCP_Server,2859817,378,126)
{
Port=1001
DataType=3
Point(doCloseAll)
link(onConnect,11389349:doStrCat,[])
}
Add(ListBox,14852958,490,133)
{
Left=120
Top=15
Width=190
Height=145
}
Add(StrCat,11389349,434,133)
{
Str1="Connect: "
link(onStrCat,14852958:doAdd,[])
}
Add(Hub,638543,322,168)
{
link(onEvent1,2859817:doClose,[(343,174)(343,139)])
link(onEvent2,2859817:doCloseAll,[(357,181)(357,153)])
}
Add(Button,7965889,98,224)
{
Left=20
Top=65
Width=75
TabOrder=-1
Caption="SendClient"
Data=String(Massage)
link(onClick,15438237:doValue,[])
}
Add(ZLIB,8458001,301,224)
{
link(onStream,2859817:doSend,[(364,230)(364,146)])
}
Add(StreamPack,11782964,252,224)
{
DataCount=#5:index|4:data|
link(onPack,8458001:doCompress,[])
link(data,15438237:Value,[(265,212)(241,212)(241,269)(153,269)])
}
Add(MainForm,3742575,98,301)
{
Width=544
Height=370
link(onCreate,10439453:doTimer,[])
}
Add(TCP_Client,12500207,273,315)
{
Port=1001
IP="127.0.0.1"
DataType=3
link(onRead,15802967:doDeCompress,[])
}
Add(Message,2796692,532,308)
{
}
Add(ZLIB,15802967,336,308)
{
link(onStream,9227562:doUnPack,[])
}
Add(StreamUnPack,9227562,392,308)
{
DataCount=#5:index|4:data|
link(onUnPack,15654783:doEvent,[])
}
Add(ChanelToIndex,14026521,196,224)
{
Count=3
link(onIndex,11782964:doPack,[])
}
Add(Memory,15438237,147,224)
{
link(onData,14026521:doWork1,[])
}
Add(IndexToChanel,15654783,448,308)
{
Point(Index)
Point(Data)
link(onEvent1,2796692:doMessage,[])
link(Index,9227562:index,[(454,287)(438,287)(438,359)(398,359)])
link(Data,9227562:data,[(461,296)(433,296)(433,352)(405,352)])
}
Add(Timer,10439453,154,315)
{
Interval=0
Enable=1
link(onTimer,8631349:doEvent1,[])
}
Add(Hub,8631349,210,315)
{
link(onEvent1,12500207:doOpen,[])
link(onEvent2,1268929:doProcessMessages,[(248,328)(248,363)])
}
Add(Application,1268929,273,357)
{
}


карма: 0

0
Ответов: 189
Рейтинг: 4
#6: 2013-01-10 20:28:24 ЛС | профиль | цитата
HiAsmelementsdelphiexampleMediaPlayMIDI.sha

Попробуй с этим элементом и без.

P.S.: Мой пример у меня нормально работает (идеально), а у тебя какой error?
------------ Дoбавленo в 20.24:
С сетевыми элементами все-равно лагать будет, но меньше.
------------ Дoбавленo в 20.28:
ashkalov писал(а):
так? если я правильно понял


Так:
Add(Button,5921940,266,217)
{
Left=20
Top=15
Width=75
TabOrder=-1
Caption="Open"
link(onClick,2859817:doOpen,[])
}
Add(Button,823836,266,259)
{
Left=20
Top=40
Width=75
TabOrder=-1
Caption="Close"
link(onClick,638543:doEvent1,[])
}
Add(TCP_Server,2859817,546,217)
{
Port=1001
DataType=3
Point(doCloseAll)
link(onConnect,11389349:doStrCat,[])
}
Add(ListBox,14852958,658,224)
{
Left=120
Top=15
Width=190
Height=145
}
Add(StrCat,11389349,602,224)
{
Str1="Connect: "
link(onStrCat,14852958:doAdd,[])
}
Add(Hub,638543,490,259)
{
link(onEvent1,2859817:doClose,[(511,265)(511,230)])
link(onEvent2,2859817:doCloseAll,[(525,272)(525,244)])
}
Add(Button,7965889,266,315)
{
Left=20
Top=65
Width=75
TabOrder=-1
Caption="SendClient"
Data=String(Massage)
link(onClick,15438237:doValue,[])
}
Add(ZLIB,8458001,469,315)
{
link(onStream,2859817:doSend,[(532,321)(532,237)])
}
Add(StreamPack,11782964,420,315)
{
DataCount=#5:index|4:data|
link(onPack,8458001:doCompress,[])
link(data,15438237:Value,[(433,303)(409,303)(409,360)(321,360)])
}
Add(MainForm,3742575,266,392)
{
Width=544
Height=370
}
Add(TCP_Client,12500207,441,413)
{
Port=1001
IP="127.0.0.1"
DataType=3
link(onRead,15802967:doDeCompress,[])
link(onConnect,10439453:doStop,[(488,426)(488,470)(310,470)(310,419)])
}
Add(Message,2796692,700,406)
{
}
Add(ZLIB,15802967,504,406)
{
link(onStream,9227562:doUnPack,[])
}
Add(StreamUnPack,9227562,560,406)
{
DataCount=#5:index|4:data|
link(onUnPack,15654783:doEvent,[])
}
Add(ChanelToIndex,14026521,364,315)
{
Count=3
link(onIndex,11782964:doPack,[])
}
Add(Memory,15438237,315,315)
{
link(onData,14026521:doWork1,[])
}
Add(IndexToChanel,15654783,616,406)
{
Point(Index)
Point(Data)
link(onEvent1,2796692:doMessage,[])
link(Index,9227562:index,[(622,385)(606,385)(606,457)(566,457)])
link(Data,9227562:data,[(629,394)(601,394)(601,450)(573,450)])
}
Add(Timer,10439453,322,406)
{
Interval=8000
link(onTimer,8631349:doEvent1,[])
}
Add(Hub,8631349,378,406)
{
link(onEvent1,1268929:doProcessMessages,[(413,412)(413,377)])
link(onEvent2,12500207:doOpen,[])
}
Add(Application,1268929,434,371)
{
}


У тебя был таймер с нулевым интервалом
Таймер ставь на 8000. (Ну никак уж не меньше 1000)
карма: 0

0
Ответов: 1043
Рейтинг: 33
#7: 2013-01-10 22:21:02 ЛС | профиль | цитата
KisL()R()[), объясняю)
KisL()R()[) писал(а):
а у тебя какой error?

первую схему я твою загрузил. Но просто это какое-то извращение, а извращения ни к чему хорошему не приводят )

KisL()R()[) писал(а):
У тебя был таймер с нулевым интервалом

Да про это я знаю, я просто в качестве примера привел)
Твоя схема нечего не исправляет) убери из нее компонент Application все будет точно так же)
------------ Дoбавленo в 22.17:
KisL()R()[) писал(а):
Таймер ставь на 8000

ИМХО. Правильней всего использовать такую связку
Add(TCP_Client,10703532,273,413)
{
Port=84229
IP="127.0.0.1"
DataType=3
}
Add(Timer,10439453,154,413)
{
link(onTimer,4267391:doEvent,[])
}
Add(IndexToChanel,4267391,210,413)
{
Point(Index)
link(onEvent1,10703532:doOpen,[])
link(Index,10703532:Active,[(216,401)(259,401)(259,456)(279,456)])
}
хоть при нулевом интервале таймера хоть 8000.
------------ Дoбавленo в 22.21:
Придется использовать фишку с сервером
карма: 0

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