Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Tcp pripojenie v C # .NET

Takže predovšetkým si popíšeme ako to celé funguje a čo k tomu budeme potrebovať.

Popíšeme si metódu pripojenia Client / Server. To znamená, že si vytvoríme nejaký jednoduchý server, ktorý bude počúvať na nejakom porte. K tomu si vytvoríme nejakého jednoduchého klienta, ktorý nám bude dáta odosielať na server na porte, ktorý bude server počúvať.

TCP pripojenie určite každý pozná, ale ak nie ...

TCP (Transmission Control Protocol) je služba, ktorá je spoľahlivá na rozdiel od služby UDP. TCP pripojenia sa spája so serverom alebo klientom tak, že nadviaže spojenie na 3x a ukončuje spojenie na 4x. V realnom živote by to mohlo vyzerať nejako takto: (dúfam že sa nemýlim)

Nadviazanie spojenia:

klient: Ahoj, tu klient!
server: Ahoj, tu server. Čo potrebuješ?
klient: Chcel by som odoslať nejaké dáta, tak mi prosím načúvaj. :)
klient -> odosiela dáta ...

Ukončenie spojenia:

klient: Ahoj, chcel by som ukončiť spojenie.
server: Okay, naozaj chceš spojenie ukončiť?
klient: Áno, naozaj chcem.
server: Dobre, ukončujú spojenie.

Tak, a teraz už zase k dotNET. Budeme potrebovať naincludovat dve triedy ASIC:

using System.Net;
using System.Net.Sockets;

Vytvoríme si teda prvý server:

Tu hodím kód a potom vysvetlím.

static byte[] data;  // 1
static Socket socket; // 1
static void Main(string[] args)
{
    socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // 2
    socket.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 6666)); // 3

    socket.Listen(1); // 4
    Socket accepteddata = socket.Accept(); // 5
    data = new byte[accepteddata.SendBufferSize]; // 6
    int j = accepteddata.Receive(data); // 7
    byte[] adata = new byte[j];         // 7
    for (int i = 0; i < j; i++)         // 7
        adata[i] = data[i];             // 7
    string dat = Encoding.Default.GetString(adata); // 8
    Console.WriteLine(dat);                         // 8
}

Takže, teraz vysvetlím, čo sa v tom kóde vôbec deje.

  1. Vytvorím si statickú premennú dáta typu byte a triedu socket.
  2. Vytvorím si nový socket s typom socketu, aký má protokol -> všimnite si, že som použil ProtocolType.Tcp (nečakane).
  3. Vytvorím si nový IPEndPoint, čo je cieľová adresa, ktorú chceme hosťovať. V našom prípade je to localhost. Tiež možno zameniť IPAddress.Parse ( "127.0.0.1") za 0. No a port (ľubovoľný), v našom prípade 6666. Funkcia Bind priradí pripojenie k práve spomínané IP adrese a portu.
  4. Funkcia Listen (); slúžia k tomu, aby server vedel vlastne koľko môže maximálne načúvať užívateľov. V našom prípade je to len jeden.
  5. Ani nemusím vysvetľovať, proste si vytvorím nový socket s Datamat čo prídu.
  6. Do premennej typu byte sa nám uložia dáta čo prídu.
  7. Zjednodušene povedané: "přeuložím si dáta čo prídu do novej premennej", aby som nedekódoval stále prichádzajúce dáta.
  8. Dekóduje dáta pomocou metódy Default, čo podporuje tuším snáď všetky znaky -> taky tam je možnosť ASCII a tak podobne, no a potom len tlačím dáta čo prídu na obrazovku.

Tak a máme server. Pustíme sa teda do klienta, ten je obzvlášť jednoduchý.

using System.Net;
using System.Net.Sockets;
static void Main(string[] args)
        {
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            try // 1
            {
                s.Connect(IPAddress.Parse("127.0.0.1"), 6666); // 2
                Console.Write("Zadej nejakej text : ");
                string q = Console.ReadLine();                 // 3
                byte[] data = Encoding.Default.GetBytes(q);    // 3
                s.Send(data);
            }
            catch // 1
            {
                // nepripojeno
            }
        }

Myslím, že je všetko jasné, ale pre poriadok. (To, čo bolo vysvetlené u servera, už popisovať nebudem).

  1. Skúsim sa pripojiť na server. Ak to pôjde, dostaneme sa ďalej. Ak nie, smola, vyskočí treba nejaká chybová hláška.
  2. Skúsim sa teda pripojiť pomocou funkcie Connect. Naparsujeme si opäť IP adresu zo stringu a zadáme port, ktorý server počúva, teda 6666.
  3. Užívateľ zadá nejaký text, ja si ho uložím a zakóduje pomocou metódy default do premennej, ktorú som si vytvoril. Je to premenné dáta typu byte.
  4. A atadá, odošlem dáta na server. :)
asd - C # - Pre pokročilých

Všetko som skúšal, malo by všetko ísť bez problému. Až budem mať zase chuť, skúsime si urobiť úplne jednoduchý IM alebo napríklad hada (multiplayer). :)


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 1110x (40.35 kB)
Aplikácia je vrátane zdrojových kódov v jazyku C#

 

Všetky články v sekcii
C # - Pre pokročilých
Článok pre vás napísal Зайчик
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Коммунизм для нашего будущего!
Aktivity