Autor | Zpráva | ||
---|---|---|---|
TomasJ Profil |
Zdravím, úvodem bych chtěl říct, že jsem si vědom toho, že pro Node.js existuje přímo WebSocket modul, který dokáže spustit server, ale chci umět i jiné postupy, v node.js začínám, takže je to pro mě zdokonalování.
Skoro celý den se snažím zprovoznit pod TCP protokolem WebSocket server v Node.js (JS na straně serveru). Teda TCP server mi problém nedělal, u "podávání rukou" jsem strávil chvíli času, protože jsem posílal špatně "Sec-WebSocket-Accept" klíč. Nicméně i tohle jsem zvládl a zasekl jsem se na dekódování dat. Půl dne studuji strukturu rámce Web Socket, řekl bych, že to mám i správně, ale data se posílají chaoticky. Na internetu jsem našel jednoduchý WebSocket klient, přes který posílám zprávy. Ale dost bylo keců, hodím kód na dekódování zprávy a za to několik přijatých zpráv: function unmask(data) { var masks,nData; var len = data[1].charCodeAt(0) & 0x7F; //7 bitů z 2. bajtu if(len == 126){ //pokud délka packetu je 126, od 3. bajtu jsou 2 bajty délka "Extended payload" masks = data.substr(4, 4); //4 bajty po délce "Extended payload" - platí i pro len == 127 a else větev nData = data.substr(8); //od 9. bajtu začínají data } else if(len == 127){ //pokud délka je 127, od 3. bajtu je 8 bajtů délka "Extended payload" masks = data.substr(10, 4); //4 bajty po délce nData = data.substr(14); //od 15. bajtu začínají data } else{ //pokud délka je jiná (125 a míň), od 3. bajtu začíná maska dat masks = data.substr(2, 4); //4 bajty po 3. bajtu nData = data.substr(6); //od 7. bajtu začínají data } data = ""; for(var i=0; i<nData.length; i++){ data += String.fromCharCode(nData[i].charCodeAt(0) ^ masks[i%4].charCodeAt(0)); //přiznám se, že absolutně nevím, jaký je účel toho modula tam, každopádně bez celočíselného dělení to nejde vůbec } return data; } Serveru posílám zprávu Nick: Zprava a server mi na to odpovídá takto: ? ?? ?? ??? ??? Nic : Z rav N :? ?? N c : Z r v i t <a i? ?? ?? Nick: Zprava ??? ???? Ni k: pra a Ni??A? ? ? ? ? ? Už si s tím absolutně nevím rady, ale byl bych rád, kdyby se mi podařilo s vaší pomocí dekodér zprovoznit. |
||
SpatnaKlavesnice Profil * |
#2 · Zasláno: 1. 7. 2014, 09:37:57
A kam vypisujes ta rozlustena data? Do konzole? Zkus si vypsat take vstup do te rozlustovaci funkce, jestli se nelisi.
|
||
TomasJ Profil |
SpatnaKlavesnice:
Právě i vstup se musí lišit, to je podle mě dáno těmi maskami. Ale udělám výpis a postnu. Nejlepší bude když sem hodím jednotlivé ASCII hodnoty příchozích dat. ------------------------------------------ Tak se nestačím divit: Vstupni data po znacich v poli: 65533,65533,62,65533,119,39,112,65533,20,76,4,65 533,45,87,76,65533,1,70 Vstupni data originalni: ??>?w'p?¶L♦?-WL?☺F Packet length: 125 N ck: Zpr va Vstupni data po znacich v poli: 65533,65533,61,105,95,15,115,0,60,100,7,73,5,127 ,79,8,41,110 Vstupni data originalni: ??=i_☼s <dI♣⌂)n Packet length: 125 Nick: Zprava Vstupni data po znacich v poli: 65533,65533,56,22,336,118,127,65533,65533,2,54,6 5533,65533,74,119,65533,65533 Vstupni data originalni: ??8▬Őv⌂??☻6??Jw?? Packet length: 125 G??t♫??<O?? Vstupni data po znacich v poli: 65533,65533,65533,30,66,65533,65533,119,33,65533 ,65533,62,24,1001,127,52,65533 Vstupni data originalni: ???▲B??w!??>↑?⌂4? Packet length: 125 ic Z??*? Vstupni data po znacich v poli: 65533,65533,95,40,80,103,17,65,51,12,101,8,10,23 ,45,73,38,6 Vstupni data originalni: ??_(Pg◄A3♀e ↨-I&♠ Packet length: 125 Nick: Zprava |
||
SpatnaKlavesnice Profil * |
#4 · Zasláno: 1. 7. 2014, 17:50:58
Osobne bych data ukladal do Bufferu, ktery je na tyto veci urceny.
|
||
TomasJ Profil |
#5 · Zasláno: 2. 7. 2014, 09:46:31
SpatnaKlavesnice:
Díky moc, já je tam používal, ale neužíval jsem "encoding", nechával jsem prázdné buffer.toString() .
Projel jsem seznam kódování a narazil jsem na "binary". Poslal jsem právě takto dekódovaný řetězec funkci a funguje to. Ukázka: Vstupni data po znacich v poli: 129,140,64,177,45,150,14,216,78,253,122,145,119, 230,50,208,91,247 Vstupni data originalni: ??@+-?♫ONýz?wa2?[÷ Packet length: 12 Nick: Zprava Vstupni data po znacich v poli: 129,140,65,86,115,62,15,63,16,85,123,118,41,78,5 1,55,5,95 Vstupni data originalni: ??AVs>☼?►U{v)N37♣_ Packet length: 12 Nick: Zprava Vstupni data po znacich v poli: 129,140,75,126,140,176,5,23,239,219,113,94,214,1 92,57,31,250,209 Vstupni data originalni: ??K~?°♣↨iUq^ÖA9▼úN Packet length: 12 Nick: Zprava Vstupni data po znacich v poli: 129,140,49,100,252,42,127,13,159,65,11,68,166,90 ,67,5,138,75 Vstupni data originalni: ??1dü*⌂ ?A♂D|ZC♣?K Packet length: 12 Nick: Zprava |
||
Časová prodleva: 11 let
|
0