Вверх ↑
Этот топик читают: Гость
Ответов: 316
Рейтинг: 21
#1: 2018-08-13 15:55:39 ЛС | профиль | цитата
Разбираюсь с вебсокетами, охота поднять их на элементах
По этому примеру https://habr.com/post/79038/ подключился к серверу - echo.websocket.org
Сейчас не получается реализовать строку - 0x00, ‹строка в кодировке UTF-8›, 0xFF
Хочу получить что-то наподобие https://www.websocket.org/echo.html

Кто-то знает как это можно реализовать?

Add(MainForm,2953706,511,133)
{
Width=561
Height=455
Caption="WebSocket"
BorderStyle=3
Position=1
}
Add(RichEdit,13410615,798,133)
{
Top=34
Width=555
Height=389
Align=5
ScrollBars=3
}
Add(ChildPanel,13373125,728,133)
{
link(onEvent1,13410615:doAdd,[])
link(onEvent2,13410615:doClear,[])
}
BEGIN_SDK
Add(EditMulti,13386744,371,224)
{
EventCount=2
WorkCount=1
Width=475
Height=102
link(doWork1,1965081:doWork2,[(575,230)(575,279)])
}
Add(Panel,14885927,420,238)
{
Width=555
Height=34
Align=2
BorderWidth=0
BevelInner=0
BevelWidth=0
}
Add(TCP_Client,2520033,686,259)
{
Port=80
IP="174.129.224.73"
link(onRead,13386744:onEvent1,[(735,265)(735,230)])
link(onConnect,13375140:doOn,[(732,272)(732,279)])
link(onDisconnect,13375140:doOff,[(732,279)(732,272)])
}
Add(FormatStr,851539,637,231)
{
Mask="GET / HTTP/1.1\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nHost: echo.websocket.org\r\nOrigin: wss://echo.websocket.org\r\n\r\n"
link(onFString,1965081:doWork1,[(677,237)])
}
Add(Hub,2475254,602,259)
{
link(onEvent1,2520033:doOpen,[])
link(onEvent2,851539:doString,[(623,272)(623,237)])
}
Add(LED,13375140,756,259)
{
Left=120
Top=12
Width=10
Height=10
Shape=1
Blick=1
ColorOn=65280
ColorOff=8421504
ColorBlick=32768
}
Add(IndexToChanel,4701145,539,280)
{
link(onEvent1,14335319:doEvent1,[])
link(onEvent2,2475254:doEvent1,[(587,293)(587,265)])
}
Add(CheckBox,7990354,490,280)
{
Left=15
Top=7
Width=100
Caption="Подключиться"
link(onCheck,4701145:doEvent,[])
}
Add(Timer,7552431,420,280)
{
AutoStop=1
link(onTimer,7990354:doCheck,[])
}
Add(Hub,14335319,595,280)
{
link(onEvent1,2520033:doClose,[(647,286)(647,272)])
link(onEvent2,13386744:onEvent2,[(831,293)(831,237)])
}
Add(HubEx,1965081,673,273)
{
link(onEvent,2520033:doSend,[])
}
END_SDK
Add(ChildPanel,2740132,553,133)
{
link(onEvent1,8358243:doStrCat,[])
}
BEGIN_SDK
Add(EditMulti,12409966,21,21)
{
EventCount=1
Width=440
Height=298
}
Add(Panel,6157873,35,63)
{
Left=35
Top=105
Width=564
Height=34
Align=4
BorderWidth=0
BevelInner=0
BevelWidth=0
}
Add(Button,4577816,28,196)
{
Left=4
Top=6
Width=115
Caption="Отправка"
link(onClick,14267661:doData,[])
}
Add(Edit,14472800,308,140)
{
Left=125
Top=6
Width=425
Text="Test"
}
Add(DoData,14267661,308,196)
{
link(onEventData,12409966:onEvent1,[(400,202)(400,27)])
link(Data,14472800:Text,[])
}
END_SDK
Add(StrCat,13811691,665,133)
{
Str2="0хFF"
link(onStrCat,13373125:doWork1,[])
}
Add(StrCat,8358243,609,133)
{
Str1="0х00"
link(onStrCat,13811691:doStrCat,[])
}

Редактировалось 1 раз(а), последний 2018-08-14 17:42:49
карма: 1

0
vip
#1.1контекстная реклама от партнеров
Ответов: 1821
Рейтинг: 168
#2: 2018-08-13 19:49:36 ЛС | профиль | цитата
Нужно отправлять 0x00 и 0xFF не в строковом виде, а в бинарном.

Вообще, хотел сразу схему поправить, но нашёл особенность TCP_Client: при DataType=dtStream перед данными отправляет их длину и, исходя из исходников, отключение такого поведения сейчас не предусмотрено.

Схемы выкладываем в тегах code.

Редактировалось 1 раз(а), последний 2018-08-13 20:04:29
карма: 5

0
Ответов: 316
Рейтинг: 21
#3: 2018-08-14 12:19:51 ЛС | профиль | цитата
Получилось отправить так -

Add(StrCat,13811691,693,210)
{
Str2="0хFF"
link(Str2,519261:Var,[(706,202)(692,202)])
}
Add(Hub,7503805,553,182)
{
link(onEvent1,11235758:doConvert,[(609,188)(609,167)])
link(onEvent2,5895986:doStrCat,[(602,195)(602,216)])
}
Add(Memory,3577880,637,112)
{
Default=Integer(0)
}
Add(ConvertorEx,519261,686,161)
{
Mode=4
Digits=1
link(Data,6065481:Value,[(692,153)(699,153)])
}
Add(Memory,6065481,693,112)
{
Default=Integer(255)
}
Add(StrCat,5895986,637,210)
{
link(onStrCat,13811691:doStrCat,[])
link(Str1,11235758:Var,[])
}
Add(ConvertorEx,11235758,637,161)
{
Mode=4
Digits=1
link(onResult,519261:doConvert,[])
link(Data,3577880:Value,[])
}

Оказалось у вебсокетов есть еще две спецификации обновленных, ту которой я играюсь самая старая
Про длину - спасибо что обратил на это внимание. Не знаю почему но оно нормально работает))) Не понятно только - тот сервер к которому я обращаюсь должен эхо слать или нет

Редактировалось 2 раз(а), последний 2018-08-14 17:43:22
карма: 1

0
Ответов: 1821
Рейтинг: 168
#4: 2018-08-14 13:09:15 ЛС | профиль | цитата
LastLeader, пробовал отправлять данные в бинарном режиме 0x80 - эхо приходило
карма: 5

0
Ответов: 316
Рейтинг: 21
#5: 2018-08-14 17:20:10 ЛС | профиль | цитата
Схему можешь выложить?
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#6: 2018-08-14 17:31:31 ЛС | профиль | цитата
LastLeader, читать тоже не вредно...
sаmakacd писал(а):
Схемы выкладываем в тегах code.


Редактировалось 2 раз(а), последний 2018-08-14 17:32:23
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 316
Рейтинг: 21
#7: 2018-08-14 17:44:53 ЛС | профиль | цитата
Не заметил того сообщения
Add(MainForm,2953706,343,133)
{
Width=561
Height=455
Caption="WebSocket"
BorderStyle=3
Position=1
}
Add(RichEdit,13410615,434,182)
{
Top=34
Width=555
Height=389
Align=5
ScrollBars=3
}
Add(ChildPanel,13373125,385,182)
{
link(onEvent1,13410615:doAdd,[])
link(onEvent2,13410615:doClear,[])
}
BEGIN_SDK
Add(EditMulti,13386744,371,224)
{
EventCount=2
WorkCount=1
Width=517
Height=158
link(doWork1,7314874:doEvent1,[(385,230)(385,251)])
}
Add(Panel,14885927,490,238)
{
Width=555
Height=34
Align=2
BorderWidth=0
BevelInner=0
BevelWidth=0
}
Add(TCP_Client,2520033,686,259)
{
Port=80
IP="174.129.224.73"
link(onRead,11188231:doEvent1,[(744,265)(744,230)])
link(onConnect,13375140:doOn,[(732,272)(732,279)])
link(onDisconnect,13375140:doOff,[(732,279)(732,272)])
}
Add(FormatStr,851539,637,231)
{
Mask="GET / HTTP/1.1\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nHost: echo.websocket.org\r\nOrigin: ws://echo.websocket.org\r\n\r\n"
link(onFString,1965081:doWork1,[(676,237)])
}
Add(Hub,2475254,602,259)
{
link(onEvent1,2520033:doOpen,[])
link(onEvent2,851539:doString,[(623,272)(623,237)])
}
Add(LED,13375140,756,259)
{
Left=120
Top=12
Width=10
Height=10
Shape=1
Blick=1
ColorOn=65280
ColorOff=8421504
ColorBlick=32768
}
Add(IndexToChanel,4701145,539,280)
{
link(onEvent1,14335319:doEvent1,[])
link(onEvent2,2475254:doEvent1,[(587,293)(587,265)])
}
Add(CheckBox,7990354,490,280)
{
Left=15
Top=7
Width=100
Caption="Подключиться"
link(onCheck,4701145:doEvent,[])
}
Add(Timer,7552431,441,280)
{
AutoStop=1
link(onTimer,7990354:doCheck,[])
}
Add(Hub,14335319,595,280)
{
link(onEvent1,2520033:doClose,[(647,286)(647,272)])
link(onEvent2,13386744:onEvent2,[(858,293)(858,237)])
}
Add(HubEx,1965081,672,273)
{
link(onEvent,2520033:doSend,[])
}
Add(LED,4080142,805,231)
{
Left=500
Top=12
Width=10
Height=10
Shape=1
Blick=1
ColorOn=65280
ColorOff=8421504
ColorBlick=32768
}
Add(Hub,11188231,770,224)
{
link(onEvent1,13386744:onEvent1,[])
link(onEvent2,4080142:doChangeValue,[(798,237)(798,237)])
}
Add(Label,7330148,490,329)
{
Left=515
Top=10
Width=10
Height=17
Caption="0"
}
Add(Hub,7314874,399,245)
{
link(onEvent1,1965081:doWork2,[(543,251)(543,279)])
link(onEvent2,8722174:doLength,[(434,258)(434,335)])
}
Add(Length,8722174,441,329)
{
link(onLength,7330148:doText,[])
}
END_SDK
Add(ChildPanel,2740132,336,182)
{
link(onEvent1,13373125:doWork1,[])
}
BEGIN_SDK
Add(EditMulti,12409966,21,21)
{
EventCount=1
Width=958
Height=298
}
Add(Panel,6157873,35,63)
{
Left=35
Top=105
Width=564
Height=34
Align=4
BorderWidth=0
BevelInner=0
BevelWidth=0
}
Add(Button,4577816,28,196)
{
Left=4
Top=6
Width=115
Caption="Отправка"
link(onClick,14267661:doData,[])
}
Add(Edit,14472800,308,140)
{
Left=125
Top=6
Width=425
Text="Test"
}
Add(DoData,14267661,308,196)
{
link(onEventData,2713675:doCharset,[(418,202)(418,188)])
link(Data,14472800:Text,[])
}
Add(StrCat,13811691,693,210)
{
Str2="0хFF"
link(onStrCat,12409966:onEvent1,[(852,216)(852,27)])
link(Str2,519261:Var,[(706,202)(692,202)])
}
Add(Hub,7503805,553,182)
{
link(onEvent1,11235758:doConvert,[(609,188)(609,167)])
link(onEvent2,5895986:doStrCat,[(602,195)(602,216)])
}
Add(Memory,3577880,637,112)
{
Default=Integer(0)
}
Add(ConvertorEx,519261,686,161)
{
Mode=4
Digits=1
link(Data,6065481:Value,[(692,153)(699,153)])
}
Add(Memory,6065481,693,112)
{
Default=Integer(255)
}
Add(Charset,2713675,497,182)
{
Type=6
link(onCharset,7503805:doEvent1,[])
}
Add(StrCat,5895986,637,210)
{
link(onStrCat,13811691:doStrCat,[])
link(Str1,11235758:Var,[])
}
Add(ConvertorEx,11235758,637,161)
{
Mode=4
Digits=1
link(onResult,519261:doConvert,[])
link(Data,3577880:Value,[])
}
END_SDK


Редактировалось 1 раз(а), последний 2018-08-14 17:46:21
карма: 1

0
Ответов: 1821
Рейтинг: 168
#8: 2018-08-15 21:50:16 ЛС | профиль | цитата
LastLeader, ответ от сервера приходит в строковом режиме, когда он обёрнут в 0x00 и 0xFF. Возможно ошибаюсь, но выглядит, что визуальные элементы принимают нуль-терминальные строки, а так как ответ начинается с нулевого символа, то получается, что выводится пустая строка.


Add(ChildPanel,13373125,203,98)
{
link(onEvent1,13410615:doAdd,[])
link(onEvent2,13410615:doClear,[])
}
BEGIN_SDK
Add(EditMulti,13386744,189,154)
{
EventCount=2
WorkCount=1
Width=727
Height=263
link(doWork1,7314874:doEvent1,[(196,160)(196,188)])
}
Add(Panel,14885927,294,175)
{
Width=555
Height=34
Align=2
BorderWidth=0
BevelInner=0
BevelWidth=0
}
Add(TCP_Client,2520033,490,196)
{
Port=80
IP="174.129.224.73"
link(onRead,11188231:doEvent1,[])
link(onConnect,13375140:doOn,[(572,209)(572,223)])
link(onDisconnect,11025621:doEvent1,[])
}
Add(FormatStr,851539,441,168)
{
Mask="GET / HTTP/1.1\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nHost: echo.websocket.org\r\nOrigin: ws://echo.websocket.org\r\n\r\n"
link(onFString,1965081:doWork1,[(480,174)])
}
Add(Hub,2475254,406,196)
{
link(onEvent1,2520033:doOpen,[])
link(onEvent2,851539:doString,[(427,209)(427,174)])
}
Add(LED,13375140,588,203)
{
Left=120
Top=12
Width=10
Height=10
Shape=1
Blick=1
ColorOn=65280
ColorOff=8421504
ColorBlick=32768
}
Add(IndexToChanel,4701145,343,217)
{
link(onEvent1,14335319:doEvent1,[])
link(onEvent2,2475254:doEvent1,[(391,230)(391,202)])
}
Add(CheckBox,7990354,294,217)
{
Left=15
Top=7
Width=100
Caption="Подключиться"
link(onCheck,4701145:doEvent,[])
}
Add(Timer,7552431,245,217)
{
AutoStop=1
link(onTimer,7990354:doCheck,[])
}
Add(Hub,14335319,399,217)
{
link(onEvent1,2520033:doClose,[(451,223)(451,209)])
link(onEvent2,13386744:onEvent2,[(477,230)(477,403)(886,403)(886,167)])
}
Add(HubEx,1965081,476,210)
{
link(onEvent,2520033:doSend,[])
}
Add(LED,4080142,735,196)
{
Left=500
Top=12
Width=10
Height=10
Shape=1
Blick=1
ColorOn=65280
ColorOff=8421504
ColorBlick=32768
}
Add(Hub,11188231,693,196)
{
OutCount=3
link(onEvent1,4080142:doChangeValue,[])
link(onEvent2,6517598:doCompare,[(721,209)(721,272)])
link(onEvent3,102705:doSwitch,[(715,216)(715,335)])
}
Add(Label,7330148,294,266)
{
Left=515
Top=10
Width=10
Height=17
Caption="0"
}
Add(Hub,7314874,203,182)
{
link(onEvent1,1965081:doWork2,[(347,188)(347,216)])
link(onEvent2,8722174:doLength,[(238,195)(238,272)])
}
Add(Length,8722174,245,266)
{
link(onLength,7330148:doText,[])
}
Add(Switch,102705,735,329)
{
DataOn=Integer(1)
DataOff=Integer(0)
Point(State)
Point(doOn)
}
Add(Hub,11025621,532,210)
{
link(onEvent1,13375140:doOff,[])
link(onEvent2,7125754:In,[(567,223)(567,251)])
}
Add(LineBreak,16561526,616,336)
{
Caption="setDisconnected"
link(Out,102705:doReset,[])
Primary=[7125754,-28,-91]
}
Add(LineBreakEx,8207542,735,378)
{
Caption="isConnected"
Type=3
link(_Data,102705:State,[])
}
Add(Delete,548636,784,266)
{
Count=1
link(onDelete,1380814:doDelete,[])
}
Add(Delete,1380814,833,266)
{
Count=1
Direction=1
link(onDelete,13287700:doWork2,[])
}
Add(If_else,6517598,735,266)
{
Op2=Integer(1)
link(onTrue,548636:doDelete,[])
link(onFalse,13287700:doWork3,[(776,279)(776,310)(877,310)])
link(Op1,5596692:getVar,[])
}
Add(LineBreakEx,5596692,735,238)
{
Caption="isConnected"
Type=2
}
Add(HubEx,13287700,873,266)
{
Angle=3
link(onEvent,13386744:onEvent1,[(877,160)])
}
END_SDK
Add(MainForm,10030285,161,49)
{
Width=561
Height=455
Caption="WebSocket"
BorderStyle=3
Position=1
}
Add(RichEdit,13410615,252,98)
{
Top=34
Width=555
Height=389
Align=5
ScrollBars=3
}
Add(ChildPanel,2740132,154,98)
{
link(onEvent1,13373125:doWork1,[])
}
BEGIN_SDK
Add(EditMulti,12409966,21,21)
{
EventCount=1
Width=958
Height=298
}
Add(Panel,6157873,35,63)
{
Left=35
Top=105
Width=564
Height=34
Align=4
BorderWidth=0
BevelInner=0
BevelWidth=0
}
Add(Button,4577816,28,196)
{
Left=4
Top=6
Width=115
Caption="Отправка"
link(onClick,14267661:doData,[])
}
Add(Edit,14472800,308,140)
{
Left=125
Top=6
Width=425
Text="Test"
}
Add(DoData,14267661,308,196)
{
link(onEventData,2713675:doCharset,[(418,202)(418,188)])
link(Data,14472800:Text,[])
}
Add(StrCat,13811691,693,210)
{
Str2="0хFF"
link(onStrCat,12409966:onEvent1,[(852,216)(852,27)])
link(Str2,519261:Var,[(706,202)(692,202)])
}
Add(Hub,7503805,553,182)
{
link(onEvent1,11235758:doConvert,[(609,188)(609,167)])
link(onEvent2,5895986:doStrCat,[(602,195)(602,216)])
}
Add(Memory,3577880,637,112)
{
Default=Integer(0)
}
Add(ConvertorEx,519261,686,161)
{
Mode=4
Digits=1
link(Data,6065481:Value,[(692,153)(699,153)])
}
Add(Memory,6065481,693,112)
{
Default=Integer(255)
}
Add(Charset,2713675,497,182)
{
Type=6
link(onCharset,7503805:doEvent1,[])
}
Add(StrCat,5895986,637,210)
{
link(onStrCat,13811691:doStrCat,[])
link(Str1,11235758:Var,[])
}
Add(ConvertorEx,11235758,637,161)
{
Mode=4
Digits=1
link(onResult,519261:doConvert,[])
link(Data,3577880:Value,[])
}
END_SDK
карма: 5

0
Ответов: 704
Рейтинг: 7
#9: 2019-03-17 20:25:05 ЛС | профиль | цитата
Можно ли для этих вебсокетов организовать сервер для виндовс-приложения? Отправляя со страницы получать в приложение. Сейчас подобное через tcp-сервер реализую и отправку простых http запросов ему со страницы.

Редактировалось 2 раз(а), последний 2019-03-18 21:16:50
карма: 0

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