Latest web development tutorials

Programowanie Python sieci

Python oferuje dwa poziomy usług dostępu do sieci. :

  • usługi sieciowe na niskim poziomie w celu wspierania podstawowych Socket, zapewnia standardowy BSD Sockets API, można uzyskać dostęp do wszystkich metod bazowego interfejsu Socket systemu operacyjnego.
  • Wysoki poziom modułu serwisowego sieci SocketServer, zapewnia centralny klasy serwerów, można uprościć rozwój serwera sieciowego.

Co to jest gniazdo?

Gniazdo znany również jako "gniazdo", aplikacja jest zazwyczaj wydawane przez "gniazdo" na żądanie żądanie sieci lub sieci odpowiedzi, tak aby proces między hostami lub pomiędzy komputerem on może komunikować.


Gniazdo function ()

Python, używamy funkcji socket () w celu utworzenia gniazda, składnia jest następująca:

socket.socket([family[, type[, proto]]])

parametry

  • Rodzina: rodzina może mieć gniazdo lub AF_INET AF_UNIX
  • Rodzaj działalności: Gniazdo może być zorientowana na połączenie lub bezpołączeniowym pod SOCK_STREAM lub SOCK_DGRAM
  • Protokół: W zasadzie wypełnienia domyślnych do zera.

Metoda obiektu Socket (wbudowane)

funkcja opis
gniazdo Server
s.bind () Bind adres (host, port) do gniazda znajdującego się AF_INET, w postaci krotki (host, port) wskazuje adres.
s.listen () Zacznij TCP słuchania. Portfel określony przed odrzuceniem połączenia, system operacyjny może zawiesić maksymalną liczbę połączeń. Ta wartość wynosi co najmniej 1, w większości zastosowań może być ustawiony na 5.
s.accept () Pasywna akceptacja połączeń klientów TCP (blokujące) czeka na przybycie
gniazdo Client
s.connect () Aktywny inicjować połączenia z serwerem TCP. Ogólny adres formacie krotek (hosta, portu), ale w przypadku błędu połączenia, zwracany jest błąd socket.error.
s.connect_ex () connect () rozszerzoną wersję funkcji zwraca kod błędu w przypadku wystąpienia błędu, zamiast rzucać wyjątek
Funkcje Gniazdo cele publiczne
s.recv () Odbieranie danych TCP, dane są zwracane jako ciąg znaków, należy określić maksymalną ilość danych, które mają zostać odebrany bufsize. Dostarczenie dodatkowych informacji na temat flagi wiadomości można zazwyczaj ignorowane.
s.send () Wysyłanie danych TCP wysyła ciąg danych do połączenia gniazda. Wartość zwracana jest liczba bajtów do wysłania, liczba ta może być mniejsza niż ciąg bajtów.
s.sendall () Kompletny wysyłania danych TCP, kompletne dane transmisji TCP. Wysyła ciąg danych do połączenia gniazda, ale przed powrotem będzie próbował wysłać wszystkie dane. Udane return None, wyjątek awaria zostanie zgłoszony.
s.recvform () Odbieranie danych UDP () jest podobna do recv, ale zwracana jest wartość (dane adresowe). Którym dane jest ciągiem zawierającym odebrane dane, dane adresowe zostanie wysłany adres gniazda.
s.sendto () Wysyłanie danych UDP, wysyłania danych do gniazda, adres jest w formie (ipaddr, port) krotki podano zdalnego adresu. Wartość zwracana jest liczba bajtów wysłanych.
s.close () Zamknij gniazdo
s.getpeername () Zwraca zdalny adres gniazda przyłączeniowego. Zwracana wartość jest zwykle krotka (ipaddr, port).
s.getsockname () Zwraca własny adres gniazda jest. Zazwyczaj krotka (ipaddr, port)
s.setsockopt (poziom, nazwa_opcji, wartość) Ustaw wartość danej opcji gniazda.
s.getsockopt (poziom, nazwa_opcji [.buflen]) Zwracana wartość opcji gniazda.
s.settimeout (timeout) Zestaw operacji Gniazdo limit czasu, limit czasu jest liczbą zmiennoprzecinkową, w ciągu kilku sekund. Żadna wartość wskazuje na brak czasu oczekiwania. Ogólnie rzecz biorąc, okres czasu, powinny po prostu stworzyć zestaw gniazd, ponieważ mogą one być wykorzystywane do obsługi połączenia (np connect ())
s.gettimeout () Zwraca wartość aktualnego limitu czasu, w sekundach, jeśli nie ma ustalonego okresu czasu oczekiwania, zwróci None.
s.fileno () Zwraca deskryptor gniazda.
s.setblocking (flag) Jeśli flaga jest 0, gniazdo jest ustawiony w trybie non-blocking, poza gniazdo do trybu blokowania (wartość domyślna). tryb non-blocking, jeśli wywołanie recv () nie znaleźliśmy żadnych danych lub wysłać () połączenie nie może natychmiast wysłać dane, spowodowałoby to socket.error wyjątek.
s.makefile () Stwórz odpowiednie dokumenty w związku z gniazdka

prosty przykład

serwer

Używamy funkcjęgniazda modułu Gniazdo do utworzenia obiektu gniazda.Obiekt Gniazdo może wywołać inne funkcje, aby skonfigurować usługę gniazda.

Teraz możemy określić usługi poprzez wywołaniebind (nazwa hosta, port)Złączefunction(portu).

Następnie wywołujemy metodę przyjmowaniaprzedmiotów gniazd. Sposób czeka połączenia klienta i powrót obiektupołączeniareprezentującą na kliencie.

Pełen kod jest następujący:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:server.py

import socket               # 导入 socket 模块

s = socket.socket()         # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345                # 设置端口
s.bind((host, port))        # 绑定端口

s.listen(5)                 # 等待客户端连接
while True:
    c, addr = s.accept()     # 建立客户端连接。
    print '连接地址:', addr
    c.send('欢迎访问本教程!')
    c.close()                # 关闭连接

klient

Następnie napisać prosty klienta, aby połączyć się z instancji serwisowych utworzonych powyżej. Numer portu jest 12345.

Socket.connect (hosname, port) metoda otwiera połączenie TCP z hostem na porcienazwę hostado dostawców usług portowych.Po podłączeniu możemy zakładać, dane z serwera, pamiętaj, że po zakończeniu operacji należy zamknąć połączenie.

Pełen kod jest następujący:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:client.py

import socket               # 导入 socket 模块

s = socket.socket()         # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345                # 设置端口好

s.connect((host, port))
print s.recv(1024)
s.close()  

Teraz mamy nawet otworzyć terminal, pierwszy terminal wykonuje server.py pliku:

$ python server.py

Drugi Terminal wykonuje client.py pliku:

$ python client.py 
欢迎访问本教程!

To jest nasz pierwszy i otwórz terminal, można zobaczyć następujące informacje wyjściowe:

连接地址: ('192.168.0.118', 62461)

Moduły internetowe Python

Oto niektóre ważne programowania Python moduł sieciowy:

umowa przydatne funkcje Numer portu Moduły Pythona
HTTP dostęp do sieci 80 httplib, urllib, xmlrpclib
NNTP Odczytywanie i wysyłanie wiadomości artykuły, znany jako "post" 119 nntplib
FTP File transfer 20 ftplib, urllib
SMTP Wyślij e-mail 25 smtplib
POP3 Odbierz pocztę 110 poplib
IMAP4 Get mail 143 imaplib
Telnet command Line 23 telnetlib
suseł Znajdź informacje 70 gopherlib, urllib

Więcej szczegółów można znaleźć na oficjalnej stronie Python Biblioteki Gniazdo i modułów .