WebSockets - Server side - příjmání a odesílání zprávy – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

WebSockets - Server side - příjmání a odesílání zprávy – .NET – Fórum – Programujte.comWebSockets - Server side - příjmání a odesílání zprávy – .NET – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Franceq+1
Stálý člen
1. 7. 2014   #1
-
0
-

Nazdárek,

píšu si vlastní ws server v C#, abych pochopil jak to funguje a co se tam děje - neberu to jako aplikaci, kterou bych chtěl nějak používat - je to opravdu pro vlastní výukové účely - proto se prosím neděste, že někdo kdo o tom ví minimum si píše vlastní ws server.

Už jsem tak nějak pochopil, jak ten princip +- funguje, na stránkách MS to bylo dost hezky vysvětlené, ale mám problém s odesíláním a přijímáním zpráv. Odeslat zprávu se mi ještě nepodařilo (něco málo jsem zkoušel ale moc jsem se v tom nevrtal) a přijmout zprávu se mi podařilo - jenže a to je ten problém - přišla jako posloupnost bytů, což je nejspíš zcela správně, ale jejich dekódování je poněkud problematické. 
1) těch bytů přišlo o něco víc než obsahovala zpráva znaků - což znamená, že to sebou tahá nějaké další informace - podle toho co jsem googlil, tak první byte určuje, jestli je posílán text nebo něco jiného, další byte kóduje délku a na základě hodnoty druhého byte se odvíjí funkce dalších byte - můžou totiž taky kódovat délku (záleží na hodnotě toho druhého byte - tudíž na délce posílaného řetězce). Další byty kódují prý nějaký klíč (přesně prý 4 byty). Zbytek bytů kóduje samotnou zprávu.
2) našel jsem nějaký návod jak z bytů dostat tu zprávu - prý se k tomu používá ten 4 bytový klíč, na který se aplikuje XOR logika.
3) Moc mi to nedává smysl - příjde mi to nějaké kostrbaté a mám pocit, že jsou to bullshity a pořádně nevím jak to tedy funguje. Nevíte náhodou jak na to? Už jsem z toho docela zoufalý, vrtám se v tom snad 2 dny.

Takže abych položil konkrétní dotaz (klidně se rozepište i okolo já si rád počtu):

Jak funguje ta komunikace a co posílám kromě zprávy (co můžu ovlivnit programově a co musím respektovat)? Kde vezmu ten klíč - pokud tam tedy nějaký figuruje? Má ten klíč něco společného s klíčem z handshakingu?

S pozdravem František Falta

Nahlásit jako SPAM
IP: 147.32.91.–
p3can
~ Anonymní uživatel
312 příspěvků
1. 7. 2014   #2
-
0
-

trosku me to tady splynulo jestli myslis obyc WCF nebo jestli pouzivas skutecne WebSocket. pomohlo by kdy si sem vlozil kod serveru.

pokud te zajimaji websocket, zkusil bych je pomoci nejake knihovny. me osobne se libila tato protoze je to klasicka .NET knihovna na "3 prikazy"   

https://github.com/sta/websocket-sharp

Nahlásit jako SPAM
IP: 77.92.213.–
Franceq+1
Stálý člen
1. 7. 2014   #3
-
0
-

No jak bych to řekl...v javascriptu vytvářím skutečně websocket - dokonce se ten objekt tak jmenuje, na straně serveru mi běží prostě klasický TCP listener. Nepoužívám žádný balíček na websockety - vše potřebné si tahám ze System.Net.Sockets a System.Net.

Já právě mám z knihovny strach, protože jsem si to v budoucnu - až pochopím ty střeva chtěl přepsat do c++ a zkompilovat to pod linuxem (prostě potřebuju vědět hlavně jak to funguje - ta skutečná implementace je vedlejší - to už se prostě nějak sesmolím). Ale určitě děkuju za knihovnu, podívám se do ní a zjistím jestli v ní nenaleznu odpovědi :)

Nahlásit jako SPAM
IP: 147.32.91.–
p3can
~ Anonymní uživatel
312 příspěvků
2. 7. 2014   #4
-
0
-

jinak samozrejme ze .NET (pomoci mono) bezi i pod linuxem. ale nejake dalsi informace bez ukazky kodu tezko vydedukuju.

Nahlásit jako SPAM
IP: 77.92.213.–
Franceq+1
Stálý člen
2. 7. 2014   #5
-
0
-
Nahlásit jako SPAM
IP: 147.32.91.–
Řešení
Franceq+1
Stálý člen
2. 7. 2014   #6
-
0
-
Vyřešeno Nejlepší odpověď

   

public static String decodeMessage(Byte[] bytes)
{
     int startIndex = 6;
     if (bytes[1] - 128 == 126)
     {
          startIndex += 2;
     }
     else
     {
          if (bytes[1] - 128 == 127)
          {
               startIndex += 4;
          }
     }

     Byte[] decoded = new Byte[bytes.Length - startIndex];

     for (int i = 0; i < bytes.Length - startIndex; i++)
     {
          int index = i % 4;
          decoded[i] = (Byte)(bytes[i + startIndex] ^ bytes[startIndex - 4 + index]);
     }
     return Encoding.UTF8.GetString(decoded);
}
Nahlásit jako SPAM
IP: 147.32.91.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 56 hostů

Podobná vlákna

Websockets server na Windows — založil Tomáš Holub

IT zprávy — založil yaqwsx

PM Zprávy — založil next-x

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý