Wprowadzenie do programowania gniazd w Pythonie

W programowaniu gniazd komunikacja odbywa się za pośrednictwem sieci między dwoma gniazdami (węzłami). Serwer działa jako port nasłuchiwania, który nasłuchuje w określonym adresie IP, a gniazdo klienta sięga do gniazda serwera w celu komunikacji. Aby pracować w programowaniu gniazd, będziemy musieli zaimportować bibliotekę gniazd, którą zapewnia Python.

Python Socket Server

Gniazdo jest punktem końcowym do wysyłania lub odbierania danych, dlatego do tego celu potrzebujemy serwera i programu używającego gniazd. W naszym przykładowym programie będziemy hostować serwer i klienta na tym samym komputerze. Możemy nawet wysyłać i odbierać za pomocą kodu serwera. Należy zauważyć, że możemy mieć tylko jeden program serwerowy, podczas gdy możemy mieć wiele programów klienckich.

Protokół kontroli transmisji (TCP) jest domyślnym wybranym protokołem. TCP jest niezawodny, ponieważ pakiety upuszczane w sieci są wykrywane i przesyłane przez nadawcę. TCP zapewnia również dostarczanie danych w kolejności, tj. Kolejność, w jakiej są one wysyłane przez nadawcę w podobnej kolejności, w jakiej są odczytywane przez aplikację.

server.py

Spójrz na program poniżej: server.py

Wiersz 3: Socket jest wstępnie zainstalowaną biblioteką i zostanie do tego utworzony obiekt. Ten moduł gniazda jest importowany do programu python i będzie używany jako funkcja gniazda później w programie. Tworzymy tutaj obiekt, który wywoła funkcję gniazda.

Wiersz 4: gniazdo.AF_INET odpowiada IPV4 (jeśli chce się użyć IPV6, można użyć gniazda.AF_INET6. Odnosi się to do rodziny gniazd. AF_INET określa protokół, który będzie używany do komunikacji. IPV4 i IPV6 różnią się kontrolą transmisji sposoby lub protokoły przesyłania danych przez sieć.

IPV4 i IPV6 to po prostu różne typy adresów IP. Gniazdo.AF_INET odpowiada TCP. Transmission Control Protocol (TCP) współpracuje z adresem IP i określa, w jaki sposób komputer wysyła do siebie pakiety danych.

Następnie potrzebny jest protokół TCP, ponieważ potrzebujemy gniazda.SOCK_STREAM, który jest typem gniazda. TCP jest protokołem zorientowanym na połączenie, zasadniczo polega na wykonaniu potrójnego połączenia uzgadniania z serwerem i klientem. Następnie podajemy nazwę hosta, do którego klient się połączy.

Wiersz 5: W przypadku nazwy hosta można użyć „localhost” lub „127.0.01” lub socket.gethostname (). Pobiera adres IP serwera.

Powyżej są dwa parametry, które definiujemy dla gniazda.

Linia 6: Zwykle mamy wiele portów w naszym systemie, więc musimy skorzystać z niewykorzystanego portu hosta. Można użyć dowolnej czterocyfrowej, ponieważ w większości zajmowane są niższe cyfry.

Wiersz 7: metoda bind (), która wiąże hosta i port z gniazdem.

Wszystkie te kroki są potrzebne do uruchomienia naszego serwera. Teraz musimy zrobić klienta. Jak wspomniano wcześniej, możemy mieć wielu klientów.

Wiersz 8: mamy opcję podania numeru klienta, który może wchodzić w interakcje z serwerem. Osiąga to s.listen (6). Uruchamia nasłuchiwanie TCP. Wartość liczbowa reprezentuje liczbę klientów, którzy mogą wchodzić w interakcje. Jeśli na przykład przyjdzie 7. klient, zostanie on usunięty.

Wiersz 9: s.accept () przyjmie żądanie od klienta i zwróci dwa obiekty, jeden to obiekt typu gniazdo-klient, a drugi to adres. Adres IP będzie adresem klienta, na którym obecny jest nasz klient.

Wiersz 10: To bardziej przypomina powiadomienie dla serwera o nawiązanym połączeniu.

Na koniec wypisujemy instrukcję, która powinna być wyświetlana, gdy oba programy działają w terminalu. Po zakończeniu pracy z naszym programem serwerowym wypiszemy program klienta.

Klient Socket Python

Tutaj omawiamy o kliencie gniazda Python:

client.py

Oto nasz program dla klienta: client.py

Program kliencki ma również podobne gniazdo, jak widzimy w przypadku programu serwera. Zwykle program kliencki jest uruchamiany z programu serwera. Nie ma go na tej samej maszynie, co w tym przykładzie tutaj. W przypadku gniazd chcemy komunikować się za pośrednictwem programów w języku Python na maszynie w sieci lokalnej, a nawet w sieciach zdalnie.

Wiersz 8: W programie serwera znajduje się metoda bind (), tutaj zostanie użyta metoda connect (). Krotka tutaj zajmie host i port w metodzie. Bierzemy ten sam port, którego użyliśmy w naszym server.py

Musimy uruchomić server.py i client.py na różnych terminalach i w ten sposób zobaczymy połączenie.

Wynik:

Zrzut ekranu pochodzi z dwóch różnych terminali: jeden otwarty w CMD, a drugi otwarty w PowerShell w Windows. Lewe okno otwiera program server.py, a terminal po prawej otwiera program client.py.

Dane wyjściowe są drukowane w terminalu po stronie serwera.

Wysyłanie ciągu z jednego pliku do drugiego

Spróbujemy wysłać wiadomość ze strony klienta na stronę serwera. Napiszemy wiadomość w programie client.py.

1. client.py

Oto nasz program dla klienta: client.py

Wiersz 9 i wiersz 10: Ustawiamy wiadomość w zmiennej i wysyłamy wiadomość w postaci bajtów i konwertujemy ją lub kodujemy w formacie UTF-8. (UTF jest standardem Unicode, ponieważ cała treść wiadomości to znaki, które znajdują się pod tabelą Unicode). Powinniśmy kodować i utrzymywać dane tak małe, jak to możliwe, w przeciwnym razie transmisja się nie powiedzie.

Linia 11: Zamykamy połączenie.

W programie serwera dokonamy następujących zmian.

2. server.py

Oto nasz program dla serwera: server.py

Wiersz 11: Aby zbudować połączenie, korzystamy z obiektu klienta gniazda. Wspominamy o wielkości bufora, dodając do metody 1024 bajty (1 KB) i trzymamy komunikat zmiennej.

Wiersz 13: Następnie drukujemy metodę.

Wynik:

Ponownie otwieramy oba zaciski i widzimy następujące wyjście.

Wniosek - programowanie gniazd w języku Python

Omówiono tutaj podstawy programowania gniazd, ale należy zauważyć, że jest to ogromna domena i istnieje wiele innych rzeczy do omówienia w programowaniu gniazd. Dobre zrozumienie podstaw pomoże w radzeniu sobie ze złożonymi scenariuszami klient-serwer.

Polecane artykuły

Jest to przewodnik po programowaniu gniazd w Pythonie. W tym miejscu omawiamy koncepcję serwera gniazda python i klienta gniazda python z implementacją kodu. Możesz także przejrzeć następujące artykuły, aby dowiedzieć się więcej -

  1. Zagnieżdżone pętle Pythona
  2. 15 najważniejszych funkcji Pythona
  3. Top 7 Python IDE dla Windows
  4. Różne metody w zestawach Python