суть проблемы такова:
1) клиент авторизуется
2) после авторизации сервер отдает ему текстовый файл
3) разрыв соединения с данным клиентом
и в таком режиме сервер должен обслужить десяток клиентов.
можеть выложить схемы?
Клиент:
#pas
Add(MainForm,2953706,21,105)
{
Width=587
Height=473
Point(onClose)
link(onCreate,3892390:doOpen,[(173,125)(173,251)])
link(onClose,3892390:doClose,[(173,132)(235,239)(256,239)])
}
Add(Menu,15478480,49,252)
{
Menu=#14:Получить прайс|15:Отправить прайс|
Point(onSelectNum)
link(onSelectNum,13034002:doEvent,[])
}
Add(IndexToChanel,13034002,98,259)
{
Count=4
link(onEvent1,16000270:doEvent1,[])
}
Add(Edit,6976912,350,189)
{
Left=355
Top=10
Text="534"
DataType=1
}
Add(Edit,7962037,252,70)
{
Left=30
Top=10
Text="4;id4"
}
Add(Label,4920964,112,7)
{
Left=10
Top=15
Width=15
Height=17
Caption="ID"
}
Add(Label,10621713,196,7)
{
Left=321
Top=13
Width=23
Height=17
Caption="Port"
}
Add(TCP_Client,3892390,294,245)
{
Port=534
IP="127.0.0.1"
link(onRead,5724270:doAdd,[(387,251)(387,237)])
link(onConnect,12904837:doMessage,[(345,258)(345,272)])
link(onDisconnect,6205397:doMessage,[(345,265)(345,321)])
link(IP,788135:Text,[(300,230)(258,230)])
link(Data,8659398:Value,[])
link(Port,6976912:Text,[(314,233)(356,233)])
}
Add(Label,2044784,70,7)
{
Left=201
Top=13
Width=35
Height=17
Caption="Server"
}
Add(Edit,788135,252,189)
{
Left=241
Top=13
Width=70
Text="127.0.0.1"
}
Add(Hub,16000270,147,259)
{
OutCount=3
link(onEvent1,7860795:doCharset,[(215,265)(215,139)])
link(onEvent2,3892390:doSend,[(237,272)(237,265)])
link(onEvent3,9885348:doEvent1,[(209,279)(209,342)])
}
Add(Memo,4203426,287,336)
{
Left=10
Top=60
Width=150
Height=245
link(Str,3892390:Active,[(293,306)(300,306)])
}
Add(Label,7071050,28,7)
{
Left=10
Top=40
Width=74
Height=17
Caption="log from debug"
}
Add(Charset,7860795,252,133)
{
Type=5
link(onCharset,8659398:doValue,[])
link(Text,7962037:Text,[])
}
Add(Memory,8659398,301,133)
{
}
Add(Hub,9885348,238,336)
{
InCount=2
OutCount=1
link(onEvent1,4203426:doAdd,[])
}
Add(ListBox,5724270,448,231)
{
Left=195
Top=90
Width=360
Height=230
}
Add(Message,12904837,364,266)
{
Message="Connect"
}
Add(Message,6205397,364,315)
{
Message="Disconnect"
}
Сервер:
#pas
Add(ListBox,7441850,189,273)
{
Left=10
Top=120
Width=545
Height=245
}
Add(MainForm,44932,7,175)
{
Width=677
Height=495
Point(onClose)
link(onCreate,4622343:doEvent1,[(55,195)(55,97)])
link(onClose,3547397:doClose,[(72,202)(72,209)])
}
Add(Charset,7860795,224,196)
{
Type=4
link(onCharset,10615378:doEvent1,[])
link(Text,16440180:GetData,[])
}
Add(Hub,10028629,168,189)
{
link(onEvent1,16440180:doData,[(192,195)(192,146)])
link(onEvent2,7860795:doCharset,[])
}
Add(EventFromData,16440180,224,140)
{
}
Add(Label,16130668,56,14)
{
Left=190
Top=20
Width=78
Height=17
Caption="Список всех id"
}
Add(Hub,4622343,70,91)
{
link(onEvent1,15102806:doEvent1,[])
link(onEvent2,3547397:##open,[(104,104)(104,188)])
}
Add(ChildPanelEx,15102806,392,91)
{
@Hint=#20:GetPriceList from ID|
}
BEGIN_SDK
Add(EditMultiEx,6732175,21,21)
{
WorkCount=#17:doEvent1=onCreate|18:doEvent11=IDclient|
VarCount=#15:GetData=IniFile|
Width=468
Height=256
link(doEvent1,14377671:doEvent1,[(56,27)(56,83)])
link(doEvent11,7130373:doEvent1,[(56,34)(56,181)])
link(GetData,10060848:GetData,[(27,267)(300,267)])
}
Add(Panel,3613333,406,231)
{
Left=30
Top=25
Width=95
HintManager="GetPriceFileName"
Caption="GetPriceFileName"
}
Add(Ini,9133590,224,224)
{
Section="pricelist"
Key="1"
Type=1
link(onResult,10060848:doData,[])
link(FileName,5946817:Result,[(230,177)(272,177)])
link(Key,3767585:GetData,[(244,166)(209,166)])
}
Add(Hub,14377671,91,77)
{
link(onEvent1,7266795:doPart,[])
link(onEvent2,5946817:doStrCat,[(131,90)(131,104)])
}
Add(Application,9184634,140,28)
{
}
Add(Memory,11572293,266,28)
{
}
Add(FilePart,7266795,140,77)
{
link(onPath,11572293:doValue,[(184,83)(184,34)])
link(FileName,9184634:AppFileName,[])
}
Add(StrCat,5946817,266,98)
{
Str2="pricelist.ini"
link(Str1,11572293:Value,[])
}
Add(EventFromData,3767585,203,119)
{
}
Add(Hub,7130373,91,175)
{
link(onEvent1,3767585:doData,[(194,181)(194,125)])
link(onEvent2,9133590:doRead,[(181,188)(181,230)])
}
Add(EventFromData,10060848,294,224)
{
}
END_SDK
Add(ChildPanelEx,10615378,287,196)
{
link(onPart,10085721:doEvent1,[(327,209)(327,146)])
}
BEGIN_SDK
Add(EditMultiEx,7925778,28,21)
{
WorkCount=#21:doEvent1=Autorization|
EventCount=#22:onFalse=NoAvtorization|9:onPart=ID|16:onSplit=Password|
Width=349
link(doEvent1,2143801:doEvent1,[(42,27)(42,118)])
}
Add(Panel,10187662,42,182)
{
Left=140
Top=45
Caption="Autorization"
}
Add(ArrayEnum,9214765,119,161)
{
link(onItem,7844330:doEvent1,[])
link(Array,3050409:Array,[(125,124)(132,124)])
}
Add(StrMask,5311414,217,161)
{
Point(doMask)
link(onFalse,7925778:onFalse,[(281,73)(313,73)(313,27)])
link(onTrue,1340932:doSplit,[])
link(Str,14970901:GetData,[])
}
Add(Hub,2143801,56,112)
{
link(onEvent1,14970901:doData,[])
link(onEvent2,9214765:doEnum,[(94,125)(94,167)])
}
Add(Hub,7844330,161,161)
{
link(onEvent1,5311414:doCompare,[])
link(onEvent2,5311414:doMask,[])
}
Add(EventFromData,14970901,217,112)
{
}
Add(StrPart,1340932,287,168)
{
Char=";"
link(onSplit,7925778:onSplit,[(348,174)(348,41)])
link(onPart,7925778:onPart,[(348,181)(348,34)])
}
Add(StrList,3050409,112,42)
{
Strings=#8:1;afandi|5:2;id2|5:3;id3|5:4;id4|
}
END_SDK
Add(FileStream,3310963,392,140)
{
link(FileName,15102806:GetData,[])
}
Add(Hub,10085721,336,140)
{
OutCount=4
link(onEvent1,15102806:doEvent11,[(380,146)(380,104)])
link(onEvent2,3310963:doOpen,[(380,153)(380,146)])
link(onEvent3,8776093:doConvert,[(380,160)(380,209)])
}
Add(Convertor,8776093,392,203)
{
Mode=11
link(onResult,1315403:doValue,[])
link(Data,3310963:Stream,[])
}
Add(Message,7251272,140,287)
{
Message="Disconnect"
Caption="client"
}
Add(DoData,14941250,105,350)
{
link(onEventData,3547397:doSend,[(149,363)(149,279)(93,279)(93,202)])
link(Data,1315403:Value,[(111,292)(447,292)])
}
Add(Memory,1315403,441,203)
{
link(onData,14941250:doData,[(485,209)(485,283)(93,283)(93,356)])
}
Add(TCP_ServerEx,3547397,105,182)
{
ServerPort=534
link(onSendToAll,10028629:doEvent1,[(159,188)(159,195)])
link(onConnect,7441850:doAdd,[(170,195)(170,279)])
link(onDisconnect,7251272:doMessage,[(163,202)(163,226)(128,226)(128,293)])
}
BEGIN_SDK
Add(EditMultiEx,14296838,21,21)
{
WorkCount=#6:##open|8:##select|6:doSend|7:doClose|
EventCount=#11:onSendToAll|9:onConnect|12:onDisconnect|
VarCount=#7:##count|2:IP|
DataCount=#4:Data|
Width=174
Height=151
Point(##select)
Point(##count)
link(doSend,2556202:doSend,[(49,41)(49,76)])
link(doClose,2556202:doClose,[(45,48)(45,69)])
link(IP,2556202:IP,[(34,134)(83,134)])
}
Add(TCP_Connection,2556202,70,63)
{
link(onRead,14296838:onSendToAll,[(117,69)(117,27)])
link(onConnect,14296838:onConnect,[(148,76)(148,34)])
link(onDisconnect,14296838:onDisconnect,[(148,83)(148,41)])
link(Data,14296838:Data,[(76,42)(27,42)])
}
END_SDK
------------ Дoбавленo:
Вроде мысль пришла хорошая как решить преблему, я опишу если что не так поправьте меня пожалуйста:
когда от клиента получают данные вместе с даннимы в потоке нужно запомнить и IP адрес клиента
и возвращаемые данные отправить уже по известному IP клиента.
Можно ли это реализовать и каким образом и на какую точку передать iP клеинта?