Python - programowanie sieciowe
Python zapewnia dwa poziomy dostępu do usług sieciowych. Na niskim poziomie można uzyskać dostęp do podstawowej obsługi gniazd w podstawowym systemie operacyjnym, co umożliwia implementację klientów i serwerów zarówno dla protokołów zorientowanych na połączenia, jak i protokołów bezpołączeniowych.
Python ma również biblioteki, które zapewniają wyższy poziom dostępu do określonych protokołów sieciowych na poziomie aplikacji, takich jak FTP, HTTP i tak dalej.
W tym rozdziale poznasz najsłynniejszą koncepcję sieci - programowanie za pomocą gniazd.
Co to są gniazda?
Gniazda to punkty końcowe dwukierunkowego kanału komunikacyjnego. Gniazda mogą komunikować się w ramach procesu, między procesami na tej samej maszynie lub między procesami na różnych kontynentach.
Gniazda mogą być implementowane w wielu różnych typach kanałów: gniazda domeny Unix, TCP, UDP i tak dalej. Gniazdo biblioteka zapewnia specyficzne klasy do obsługi wspólnych transportów, jak również ogólnego interfejsu do obsługi resztę.
Gniazda mają swoje własne słownictwo -
Sr.No. | Termin i opis |
---|---|
1 | Domain Rodzina protokołów używanych jako mechanizm transportu. Te wartości są stałymi, takimi jak AF_INET, PF_INET, PF_UNIX, PF_X25 i tak dalej. |
2 | type Typ komunikacji między dwoma punktami końcowymi, zwykle SOCK_STREAM dla protokołów zorientowanych połączeniowo i SOCK_DGRAM dla protokołów bezpołączeniowych. |
3 | protocol Zwykle zero, można to wykorzystać do identyfikacji wariantu protokołu w domenie i typu. |
4 | hostname Identyfikator interfejsu sieciowego -
|
5 | port Każdy serwer nasłuchuje klientów dzwoniących na co najmniej jednym porcie. Port może być numerem portu Fixnum, ciągiem znaków zawierającym numer portu lub nazwą usługi. |
Gniazdo modułu
Aby utworzyć gniazdo, musisz użyć funkcji socket.socket () dostępnej w module gniazda , która ma ogólną składnię -
s = socket.socket (socket_family, socket_type, protocol=0)
Oto opis parametrów -
socket_family - To jest AF_UNIX lub AF_INET, jak wyjaśniono wcześniej.
socket_type - To jest SOCK_STREAM lub SOCK_DGRAM.
protocol - Zwykle jest to pomijane, domyślnie 0.
Gdy masz już obiekt gniazda , możesz użyć wymaganych funkcji do stworzenia programu klienta lub serwera. Poniżej znajduje się lista wymaganych funkcji -
Metody gniazda serwera
Sr.No. | Metoda i opis |
---|---|
1 | s.bind() Ta metoda wiąże adres (nazwa hosta, para numerów portów) z gniazdem. |
2 | s.listen() Ta metoda konfiguruje i uruchamia odbiornik TCP. |
3 | s.accept() To pasywnie akceptuje połączenie klienta TCP, czekając na nadejście połączenia (blokowanie). |
Metody gniazda klienta
Sr.No. | Metoda i opis |
---|---|
1 | s.connect() Ta metoda aktywnie inicjuje połączenie z serwerem TCP. |
Ogólne metody gniazd
Sr.No. | Metoda i opis |
---|---|
1 | s.recv() Ta metoda odbiera komunikat TCP |
2 | s.send() Ta metoda przesyła komunikat TCP |
3 | s.recvfrom() Ta metoda odbiera komunikat UDP |
4 | s.sendto() Ta metoda przesyła komunikat UDP |
5 | s.close() Ta metoda zamyka gniazdo |
6 | socket.gethostname() Zwraca nazwę hosta. |
Prosty serwer
Do pisania serwerów internetowych używamy rozszerzenia socketfunkcja dostępna w module gniazda w celu utworzenia obiektu gniazda. Obiekt gniazda jest następnie używany do wywoływania innych funkcji w celu skonfigurowania serwera gniazda.
Teraz zadzwoń bind(hostname, port)funkcję, aby określić port dla usługi na danym hoście.
Następnie wywołaj metodę accept zwróconego obiektu. Ta metoda czeka, aż klient połączy się z określonym portem, a następnie zwraca obiekt połączenia, który reprezentuje połączenie z tym klientem.
#!/usr/bin/python # This is server.py file
import socket # Import socket module
s = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345 # Reserve a port for your service.
s.bind((host, port)) # Bind to the port
s.listen(5) # Now wait for client connection.
while True:
c, addr = s.accept() # Establish connection with client.
print 'Got connection from', addr
c.send('Thank you for connecting')
c.close() # Close the connection
Prosty klient
Napiszmy bardzo prosty program kliencki, który otwiera połączenie z podanym portem 12345 i podanym hostem. Utworzenie klienta gniazda przy użyciu funkcji modułu gniazda Pythona jest bardzo proste .
Plik socket.connect(hosname, port )otwiera połączenie TCP z nazwą hosta na porcie . Gdy masz otwarte gniazdo, możesz z niego czytać jak z każdego obiektu IO. Po zakończeniu pamiętaj, aby go zamknąć, tak jak zamknąłbyś plik.
Poniższy kod to bardzo prosty klient, który łączy się z podanym hostem i portem, odczytuje wszystkie dostępne dane z gniazda, a następnie wychodzi -
#!/usr/bin/python # This is client.py file
import socket # Import socket module
s = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345 # Reserve a port for your service.
s.connect((host, port))
print s.recv(1024)
s.close() # Close the socket when done
Teraz uruchom ten server.py w tle, a następnie uruchom powyżej client.py, aby zobaczyć wynik.
# Following would start a server in background.
$ python server.py &
# Once server is started run client as follows:
$ python client.py
Dałoby to następujący wynik -
Got connection from ('127.0.0.1', 48437)
Thank you for connecting
Moduły internetowe Python
Lista niektórych ważnych modułów programowania w sieci / Internecie w języku Python.
Protokół | Wspólna funkcja | Port No | Moduł Pythona |
---|---|---|---|
HTTP | strony internetowe | 80 | httplib, urllib, xmlrpclib |
NNTP | Wiadomości Usenet | 119 | nntplib |
FTP | Przesyłanie plików | 20 | ftplib, urllib |
SMTP | Wysyłać email | 25 | smtplib |
POP3 | Pobieranie e-maila | 110 | poplib |
IMAP4 | Pobieranie e-maila | 143 | imaplib |
Telnet | Linie poleceń | 23 | telnetlib |
Suseł | Przesyłanie dokumentów | 70 | gopherlib, urllib |
Sprawdź wszystkie biblioteki wymienione powyżej, aby współpracowały z protokołami FTP, SMTP, POP i IMAP.
Dalsze lektury
To był szybki start z programowaniem w gniazdach. To obszerny temat. Zaleca się przejście przez poniższy link, aby znaleźć więcej szczegółów -
Programowanie gniazd w systemie Unix .
Biblioteka i moduły gniazd Pythona .