Вверх ↑
Этот топик читают: Гость
Ответов: 117
Рейтинг: 1
#1: 2015-03-30 18:07:09 ЛС | профиль | цитата
Доброго времени суток, уважаемые форумчане. Нужна ваша помощь. Имеется TCP_serverEx.
code_35412.txt
Допустим к серверу подключены 3 клиента. Все клиенты одновременно отправляют разные данные. Так вот никак не могу понять, как мне в данный момент времени выбирать от какого клиента я сейчас хочу принимать данные и отправить их другому конкретному клиенту "лично"? Если делать через простой TCP_server, то там все простенько - каждому клиенту свой сервер, свой порт и бери от кого хочешь когда оно требуется, но нужен Ex. Выбирать кому отправлять данные в примере ниже, через точку ##hselect, но вот как выбирать от кого - проблема для меня. Спасибо.
code_35413.txt
карма: 0

0
Ответов: 1343
Рейтинг: 31
#2: 2015-03-30 19:01:50 ЛС | профиль | цитата
[flood]тут что то было...[/flood]
карма: 2

0
Ответов: 117
Рейтинг: 1
#3: 2015-04-02 22:24:10 ЛС | профиль | цитата
Все еще прошу помощи. Перелопатил уже наверно весь поиск
карма: 0

0
Ответов: 1343
Рейтинг: 31
#4: 2015-04-02 23:03:49 ЛС | профиль | цитата
Собирай массив строк который будет распределять данные,... после отправки удаляй операцию из массива и лопать соедующую или если кончились, то жди поступления новых
карма: 2

0
Ответов: 117
Рейтинг: 1
#5: 2015-04-03 10:44:01 ЛС | профиль | цитата
Rysik, не могли бы Вы показать на простейшем примере? Тяжело понимать "на слух", не зная какой компонент применить...
code_35442.txt
карма: 0

0
файлы: 1code_35442.txt [2.3KB] [181]
Ответов: 1343
Рейтинг: 31
#6: 2015-04-03 14:03:30 ЛС | профиль | цитата
конкретизируй задачу, кто кому и что должен слать?
какое управление предполагается, как твой сервер должен понимать кому слать, рандомно или как?
может клиент сам указывает кому слать данные, что собой представляет этот сервер, чат может или что... какой объём данных предполагается передавать?
карма: 2

0
Ответов: 117
Рейтинг: 1
#7: 2015-04-03 14:10:24 ЛС | профиль | цитата
Управление и команды серверу, а также кому слать я могу реализовать, я лишь не могу разделить на точке onRead от сервера данные от трех клиентов каждый отдельно. Визуальная схемка ниже, только понятно, что на месте компонета Hub надо как то разделить потоки.

Add(MainForm,3448458,84,84)
{
Width=422
Height=509
Position=1
link(onCreate,12759448:doEvent1,[(219,104)(219,160)])
}
Add(TCP_ServerEx,5296270,413,154)
{
ServerPort=1001
link(onRead,7659325:doEvent1,[])
}
BEGIN_SDK
Add(EditMultiEx,9763113,3,3)
{
WorkCount=#6:##open|15:doClose=doClose|13:doSend=doSend|5:##add|8:##select|8:##delete|7:##clear|9:##hselect|9:##hdelete|14:doSend1=doSend|
EventCount=#13:onRead=onRead|19:onConnect=onConnect|25:onDisconnect=onDisconnect|15:onError=onError|21:onProgress=onProgress|
VarCount=#7:##count|7:##index|8:##handle|13:Active=Active|5:IP=IP|
Width=370
Height=270
Point(##add)
Point(##select)
Point(##delete)
Point(##clear)
Point(##hselect)
Point(##hdelete)
Point(##count)
Point(##index)
Point(##handle)
link(doClose,9333889:doClose,[(68,16)(68,111)])
link(Active,9333889:Active,[(30,208)(174,208)])
link(IP,9333889:IP,[(37,208)(181,208)])
}
Add(TCP_Connection,9333889,168,105)
{
Point(onError)
Point(onProgress)
link(onRead,9763113:onRead,[(286,111)(286,9)])
link(onConnect,9763113:onConnect,[(286,118)(286,16)])
link(onDisconnect,9763113:onDisconnect,[(286,125)(286,23)])
link(onError,9763113:onError,[(286,132)(286,30)])
link(onProgress,9763113:onProgress,[(286,139)(286,37)])
}
END_SDK
Add(TCP_Client,6538611,420,287)
{
Port=1001
IP="127.0.0.1"
}
Add(Hub,12759448,238,154)
{
OutCount=4
link(onEvent1,5296270:##open,[])
link(onEvent2,6538611:doOpen,[(336,167)(336,293)])
link(onEvent3,4979280:doOpen,[(325,174)(325,349)])
link(onEvent4,4213358:doOpen,[(336,181)(336,405)])
}
Add(TCP_Client,4979280,420,343)
{
Port=1001
IP="127.0.0.1"
}
Add(Timer,14669755,140,364)
{
link(onTimer,12974517:doEvent1,[])
}
Add(FormatStr,9417719,238,336)
{
Mask="111"
link(onFString,6538611:doSend,[(345,342)(345,307)])
}
Add(FormatStr,13909718,238,392)
{
Mask="222"
link(onFString,4979280:doSend,[(345,398)(345,363)])
}
Add(Hub,12974517,189,364)
{
OutCount=3
link(onEvent1,9417719:doString,[(221,370)(221,342)])
link(onEvent2,13909718:doString,[(221,377)(221,398)])
link(onEvent3,12116866:doString,[(221,384)(221,454)])
}
Add(FormatStr,12116866,238,448)
{
Mask="333"
link(onFString,4213358:doSend,[(345,454)(345,419)])
}
Add(TCP_Client,4213358,420,399)
{
Port=1001
IP="127.0.0.1"
}
Add(Memo,8542496,623,84)
{
Left=11
Top=61
Width=95
Height=375
AddType=1
ScrollBars=2
}
Add(Memo,12638201,623,161)
{
Left=131
Top=61
Width=95
Height=375
AddType=1
ScrollBars=2
}
Add(Memo,4556365,623,245)
{
Left=261
Top=61
Width=95
Height=375
AddType=1
ScrollBars=2
}
Add(Label,15466551,161,28)
{
Left=30
Top=30
Width=49
Height=17
Caption="Клиент 1"
}
Add(Label,183582,238,28)
{
Left=160
Top=30
Width=49
Height=17
Caption="Клиент 2"
}
Add(Label,10237509,322,28)
{
Left=290
Top=30
Width=49
Height=17
Caption="Клиент 3"
}
Add(Hub,7659325,483,154)
{
OutCount=3
link(onEvent1,8542496:doAdd,[(537,160)(537,90)])
link(onEvent2,12638201:doAdd,[])
link(onEvent3,4556365:doAdd,[(553,174)(553,251)])
}

карма: 0

0
файлы: 3code_35412.txt [1.1KB] [109], code_35413.txt [2.1KB] [190], code_35445.txt [3KB] [175]
Ответов: 1343
Рейтинг: 31
#8: 2015-04-03 14:13:42 ЛС | профиль | цитата
клиентов будет всегда 3 ? айпи ихние всегда будут статика?
карма: 2

0
Ответов: 117
Рейтинг: 1
#9: 2015-04-03 14:15:09 ЛС | профиль | цитата
Клиентов всегда неизвестное количество и неизвестные ip.
карма: 0

0
Ответов: 4631
Рейтинг: 749
#10: 2015-04-03 14:32:36 ЛС | профиль | цитата
Mr.Tiesto, глянь сюда: [url]forum.html?q=3&t=63600[/url]
карма: 26

0
Ответов: 117
Рейтинг: 1
#11: 2015-04-03 14:55:07 ЛС | профиль | цитата
Netspirit, спасибо, никогда не видел эту тему. Очень интересные компоненты, лишь бы сервер мог работать со множеством клиентов и проводить операции. Попробую их.
------------ Дoбавленo в 14.55:
И с новым компонентом не получается в данный момент времени получать данные только от конкретного клиента с конкретным id, приходит всё разом, хотя вроде посылаю на CliendID сервера идентификатор клиента... И хотелось бы знать как компоненту указать тип данных dtString/dtStream, как в классической версии.
Add(TCPServer,476432,441,210)
{
Port=1001
Point(doEnumClients)
Point(onEnumClients)
link(onReceive,8542496:doAdd,[(531,216)(531,153)])
link(ClientID,2523225:Text,[(454,198)(559,198)(559,282)(664,282)])
link(onEnumClients,12194647:doAdd,[])
}
Add(MainForm,3448458,133,147)
{
Width=721
Height=509
Position=1
link(onCreate,12759448:doEvent1,[(268,167)(268,223)])
}
Add(TCP_Client,6538611,469,350)
{
Port=1001
IP="127.0.0.1"
}
Add(Hub,12759448,287,217)
{
OutCount=4
link(onEvent1,476432:doStartServer,[])
link(onEvent2,6538611:doOpen,[(385,230)(385,356)])
link(onEvent3,4979280:doOpen,[(374,237)(374,412)])
link(onEvent4,4213358:doOpen,[(385,244)(385,468)])
}
Add(TCP_Client,4979280,469,406)
{
Port=1001
IP="127.0.0.1"
}
Add(Timer,14669755,196,427)
{
link(onTimer,12974517:doEvent1,[])
}
Add(FormatStr,9417719,287,399)
{
Mask="111"
link(onFString,6538611:doSend,[(394,405)(394,370)])
}
Add(FormatStr,13909718,287,455)
{
Mask="222"
link(onFString,4979280:doSend,[(394,461)(394,426)])
}
Add(Hub,12974517,238,427)
{
OutCount=3
link(onEvent1,9417719:doString,[(270,433)(270,405)])
link(onEvent2,13909718:doString,[(270,440)(270,461)])
link(onEvent3,12116866:doString,[(270,447)(270,517)])
}
Add(FormatStr,12116866,287,511)
{
Mask="333"
link(onFString,4213358:doSend,[(394,517)(394,482)])
}
Add(TCP_Client,4213358,469,462)
{
Port=1001
IP="127.0.0.1"
}
Add(Memo,8542496,588,147)
{
Left=11
Top=61
Width=95
Height=375
AddType=1
ScrollBars=2
}
Add(Label,15466551,280,63)
{
Left=30
Top=30
Width=49
Height=17
Caption="Клиент 1"
}
Add(ListBox,12194647,588,231)
{
Left=410
Top=85
Width=140
Height=150
Point(String)
link(onClick,2523225:doText,[])
}
Add(Edit,2523225,658,238)
{
Left=410
Top=245
Width=140
link(Str,12194647:String,[(664,226)(643,226)(643,302)(615,302)])
}
Add(Timer,16146335,210,287)
{
Interval=100
AutoStop=1
link(onTimer,476432:doEnumClients,[(409,293)(409,244)])
}
Add(Label,6081536,336,63)
{
Left=450
Top=60
Width=12
Height=17
Caption="id"
}


карма: 0

0
Ответов: 4631
Рейтинг: 749
#12: 2015-04-03 15:03:23 ЛС | профиль | цитата
Оно не приходит одновременно. Оно приходит попеременно, и на каждое событие точка CurClientID содержит идентификатор клиента.

Mr.Tiesto писал(а):
как компоненту указать тип данных dtString/dtStream
Не предусмотрено. Как передавать файлы продемонстрировано здесь: [url]forum.html?q=3&t=64980[/url]
карма: 26

1
Голосовали:Mr.Tiesto
Ответов: 117
Рейтинг: 1
#13: 2015-04-03 16:03:34 ЛС | профиль | цитата
Разделить получилось таким способом:
code_35447.txt

Передавать планируется текст и иногда картинки, без сохранения в файл.
------------ Дoбавленo в 15.55:
Сервер взял новый, клиент со старым компонентом. Текст перевел в поток, слепил с картинкой через StreamPack, на выходе все обратно по полкам. Полет нормальный)
------------ Дoбавленo в 16.03:
Спасибо большое Rysik и Netspirit за помощь.
карма: 0

0
файлы: 1code_35447.txt [2.3KB] [166]
Ответов: 1343
Рейтинг: 31
#14: 2015-04-03 18:07:36 ЛС | профиль | цитата
Mr.Tiesto писал(а):
dtStream


перед отправкой, конвертируй stream в str и отсылай как есть
карма: 2

0
Ответов: 117
Рейтинг: 1
#15: 2015-04-03 21:08:32 ЛС | профиль | цитата
Rysik, картинка в str тоже уйдет?
карма: 0

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