Вверх ↑
Этот топик читают: Гость
Ответов: 253
Рейтинг: 0
#1: 2022-05-07 22:23:33 ЛС | профиль | цитата
Подскажите пожалуйста как правильно создать очередь потока данных.
Задумка в том чтобы соотнести клиентов сервера(ip) с именами компьютеров

В таком виде вроде работает

Add(TCP_Server,9564573,238,161)
{
Port=4545
DataType=3
link(onRead,1570422:doGet,[])
link(onConnect,13607125:doData,[(282,174)(282,192)(58,192)(58,209)])
}
Add(TCP_Client,1132208,315,420)
{
Port=4545
IP="127.0.0.1"
DataType=3
link(onRead,14927282:doUnPack,[])
}
Add(DoData,3501930,154,434)
{
Data=String()
link(onEventData,12524206:doWork1,[])
link(Data,10497356:CompName,[])
}
Add(StreamPack,14434465,245,434)
{
DataCount=#10:тип данных|6:данные|0:|
link(onPack,1132208:doSend,[])
link(данные,12524206:Data,[(258,422)(230,422)(230,478)(202,478)])
}
Add(ChanelToIndex,12524206,196,434)
{
Count=3
Point(Data)
link(onIndex,14434465:doPack,[])
}
Add(StreamUnPack,4967146,350,168)
{
DataCount=#10:тип данных|6:данные|1:4|0:|
link(onUnPack,16510364:doEvent,[(394,174)(394,167)])
}
Add(IndexToChanel,16510364,406,161)
{
Count=4
Point(Index)
Point(Data)
link(onEvent1,4714348:doValue,[])
link(Index,4967146:тип данных,[(412,149)(397,149)(397,209)(356,209)])
link(Data,4967146:данные,[(419,144)(391,144)(391,205)(363,205)])
}
Add(Button,2666426,182,294)
{
Left=15
Top=15
Width=110
Caption="Подключиться"
link(onClick,1132208:doOpen,[(289,300)(289,426)])
}
Add(MT_Get,1570422,287,161)
{
link(onData,7463045:doStrCatDlm,[(383,167)(383,230)])
link(onGet,4967146:doUnPack,[])
}
Add(StrCatDelim,7463045,441,224)
{
Delimiter=";"
link(onStrCatDlm,5219673:doAdd,[])
link(Str2,4714348:Value,[])
}
Add(Memory,4714348,448,161)
{
}
Add(DoData,13607125,70,203)
{
Data=String(!info!1!info!)
link(onEventData,3253775:doWork1,[])
}
Add(StreamPack,10662291,161,203)
{
DataCount=#10:тип данных|6:данные|0:|
link(onPack,9564573:doSend,[(215,209)(215,181)])
link(данные,3253775:Data,[(174,177)(153,177)(153,247)(125,247)])
}
Add(ChanelToIndex,3253775,119,203)
{
Count=1
Point(Data)
link(onIndex,10662291:doPack,[])
}
Add(StreamUnPack,14927282,378,420)
{
DataCount=#10:тип данных|6:данные|1:4|0:|
link(onUnPack,4440037:doEvent,[(422,426)(422,419)])
}
Add(IndexToChanel,4440037,434,413)
{
Count=3
Point(Index)
Point(Data)
link(onEvent1,59653:doSearch,[])
link(Index,14927282:тип данных,[(440,401)(425,401)(425,461)(384,461)])
link(Data,14927282:данные,[(447,396)(419,396)(419,457)(391,457)])
}
Add(BlockFind,59653,483,413)
{
IncludeBlock=1
StartBlock="!info!"
EndBlock="!info!"
link(onSearch,3501930:doData,[(527,419)(527,429)(142,429)(142,440)])
}
Add(ListBox,5219673,497,224)
{
Left=25
Top=85
Width=330
Height=155
}
Add(ComputerInfo,10497356,147,378)
{
}


Но когда клиентов много и они все одновременно пытаться подключиться, происходит дикий хаус.
карма: 0

0
Ответов: 253
Рейтинг: 0
#2: 2022-05-07 23:31:19 ЛС | профиль | цитата
Я так понимаю проблема возникает когда клиенты одновременно начинают стучаться в порт
карма: 0

0
Ответов: 784
Рейтинг: 168
#3: 2022-05-08 00:09:55 ЛС | профиль | цитата
egorhay, А много клиентов это сколько? Создал более тысячи соединений проблем не увидел.
И схему можно проще сделать.

Add(MainForm,2953706,91,77)
{
link(onCreate,9564573:doOpen,[])
}
Add(TCP_Server,9564573,168,91)
{
Port=4545
link(onRead,5594224:doStr,[])
link(onConnect,9564573:doSend,[(207,104)(207,132)(158,132)(158,111)])
}
Add(MT_String,5594224,231,91)
{
link(onResult,5219673:doAdd,[])
}
Add(Button,2666426,77,210)
{
Left=15
Top=15
Width=110
Caption="Подключиться"
link(onClick,13546269:doOpen,[])
}
Add(ListBox,5219673,287,91)
{
Left=25
Top=85
Width=330
Height=155
}
Add(TCP_Client,13546269,189,210)
{
Port=4545
IP="127.0.0.1"
link(onRead,13345042:doData,[])
}
Add(DoData,13345042,238,210)
{
Data=String()
link(onEventData,8505971:doEvent1,[(277,216)(277,251)(130,251)(130,230)])
link(Data,2286946:CompName,[])
}
Add(ComputerInfo,2286946,231,154)
{
}
Add(Hub,8505971,140,224)
{
OutCount=3
link(onEvent1,13546269:doSend,[])
link(onEvent2,13546269:doClose,[(165,237)(165,223)])
}

карма: 15

0
Ответов: 253
Рейтинг: 0
#4: 2022-05-08 00:50:29 ЛС | профиль | цитата
Да, так работает отлично. но не понимаю как это реализовать с dtStream элементе TCP_Server
карма: 0

0
Ответов: 4628
Рейтинг: 749
#5: 2022-05-14 17:54:21 ЛС | профиль | цитата
В стандартных компонентах нет индивидуального учета соединений, поэтому вряд-ли такое получится.
В альтернативных TCP-компонентах есть, но нету режима dtStream.
карма: 26

0
Ответов: 253
Рейтинг: 0
#6: 2022-05-20 15:45:01 ЛС | профиль | цитата
Спасибо большое, попробую
карма: 0

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