Wytłumaczenie kodu - prośba

0

Witam Was,

miałbym do Was prośbę, mianowicie czy ktoś z forumowiczów mógłby mi wytłumaczyć (tak dla laika - łopatologicznie) jakie procesy zachodzą w każdej linijce niżej zamieszczonego kodu.

while (true)
{
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPAddress serverAddr = IPAddress.Parse("adres IP");
IPEndPoint endPoint = new IPEndPoint(serverAddr, 11000);
string text = "Hello";
byte[] send_buffer = Encoding.ASCII.GetBytes(text);
sock.SendTo(send_buffer, endPoint);
}

Z góry wielkie dzięki i pozdrawiam.

2
while (true)
{ ...}

Pętla while wykonuje się tak długo, jak warunek podany w nawiasie będzie prawdziwy. Można dać wyrażenie w stylu while (zmienna > 90) i wtedy pętla będzie się wykonywać w kółko tak długo, aż zmienna będzie większa od 90. Ponieważ u Ciebie warunkiem jest TRUE, więc ten warunek będzie zawsze prawdziwy, a co za tym idzie - pętla będzie się kręcić w nieskończoność.

Jeszcze takie wyjaśnienie, bo nie wiem, czy wiesz, co to jest pętla. Pętle służą do powtarzania danej sekwencji poleceń, czyli w typ wypadku wszystko między { i } będzie powtarzane.

Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

Tutaj tworzymy sobie socket, czyli obiekt, który wykorzystamy do komunikacji przez sieć. Komunikacja będzie wykonana w oparciu o protokół UDP.

IPAddress serverAddr = IPAddress.Parse("adres IP");
IPEndPoint endPoint = new IPEndPoint(serverAddr, 11000);

Tutaj określasz parametry połączenia, czyli wskazujesz adres IP oraz port, na którym ta komunikacja ma się odbywać.

string text = "Hello";

Tworzysz zmienną tekstową, której przypisujesz wartość Hello - ta treść będzie później wysyłana przez stworzone wcześniej połączenie sieciowe

byte[] send_buffer = Encoding.ASCII.GetBytes(text);
sock.SendTo(send_buffer, endPoint);

Tutaj następuje właściwe przesłanie treści - najpierw deklarujesz tablicę i zapełniasz ją wartością pobraną ze zmiennej text, a następnie wysyłasz tą treść przez sieć.

Specjalistą od C# ani socketów nie jestem, więc proszę innych o sprostowanie, jeśli piszę głupoty, ale widzę tutaj potencjalny wyciek pamięci. Za każdym przebiegiem pętli jest tworzony nowy obiekt Socket sock = new Socket, ale nie widzę jego zwalniania. Czy tak powinno być (i np. socket jest automatycznie niszczony po zakończeniu transmisji/wysłaniu danych), czy tworzymy ich nieskończoną ilość i robimy przez to niezły bałagan? Poza tym, jak słusznie zauważył @Tomek Pycia, w pewnym momencie system stwierdzi, że więcej socketów nam już nie przydzieli, bo nie chce/nie może.

0

Dziękuję bardzo za konkretną i szybką odpowiedź. Tyle mi wystarczy :) Jeszcze raz dzięki i pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1