Przechodzę przez książkę o nazwie "gwałtowny Python" i jest skrypt, który ciągnie dane FTP za pomocą modułu gniazda
>>> import socket
>>> socket.setdefaulttimeout(2)
>>> s = socket.socket()
>>> s.connect(("192.168.95.148",21))
>>> ans = s.recv(1024)
>>> print ans
Czy ktoś może wyjaśnić sekcję s = socket.socket()
?
s.connect(("192.168.95.148",21))
Czy to jak mówienie:
socket.socket.(connect(("192.168.95.148",21)))
Po prostu zdezorientowany o zmiennej s
i dlaczego należy stwierdzić dwa razy? Mam nadzieję, że ma sens i jestem pewien, że dotyczy to więcej niż tylko tej metody.
2 odpowiedzi
socket()
jest funkcją w bibliotece socket
, więc gdy import socket
i będziesz musiał użyć funkcji socket()
, odwołujesz go przez socket.socket()
.
Alternatywnie, możesz zrobić, from socket import socket
i do {x1}}
Z Doc,
Utwórz nowe gniazdo za pomocą podanej rodziny adresowej, typu gniazda i numeru protokołu. Rodzina adresowa powinna być af_inet (domyślna), af_inet6 lub af_unix. Typ gniazda powinien być sock_stream (domyślny), sock_dgram lub być może jedną z pozostałych stałych soków. Numer protokołu jest zwykle zero i może być pominięty w tym przypadku.
Kiedy to robisz s.connect(("192.168.95.148",21))
jest odpowiednik socket.socket().connect(("192.168.95.148",21))
.
W twoim przypadku miałoby to sens, aby przypisać socket.socket()
do s
, jak używasz go wiele razy.
>>> s.connect(("192.168.95.148",21))
>>> ans = s.recv(1024)
>>> print ans
Koniecznie będzie lepszy niż,
>>> socket.socket().connect(("192.168.95.148",21))
>>> ans = socket.socket().recv(1024)
>>> print ans
Odkąd jesteś także programowaniem i w tym konkretnym kontekście, możesz spojrzeć na suche zasada. Proponowałbym również, aby przejść przez PEP8 Standardy dla dobrych praktyk kodujących.
Przejście krok dalej, jeśli masz wątpliwości co do funkcji lub oświadczenia, możesz użyć funkcji help
.
Fragment help(socket)
:
Opis Ten moduł zapewnia operacje gniazd i niektóre pokrewne funkcje. W systemie UNIX obsługuje gniazda IP (protokol internetowy) i UNIX. W innych systemach obsługuje on tylko IP. Funkcje specyficzne dla gniazda są dostępne jako metody obiektu gniazda.
Functions: socket() -- create a new socket object socketpair() -- create a pair of new socket objects [*] fromfd() -- create a socket object from an open file descriptor [*] gethostname() -- return the current hostname gethostbyname() -- map a hostname to its IP number gethostbyaddr() -- map an IP number or hostname to DNS info getservbyname() -- map a service name and a protocol name to a port number getprotobyname() -- map a protocol name (e.g. 'tcp') to a number ntohs(), ntohl() -- convert 16, 32 bit int from network to host byte order htons(), htonl() -- convert 16, 32 bit int from host to network byte order inet_aton() -- convert IP addr string (123.45.67.89) to 32-bit packed format inet_ntoa() -- convert 32-bit packed format IP to string (123.45.67.89) ssl() -- secure socket layer support (only available if configured) socket.getdefaulttimeout() -- get the default timeout value socket.setdefaulttimeout() -- set the default timeout value create_connection() -- connects to an address, with an optional timeout and optional source address.
Fragment help(socket.socket())
:
|. Gniazdo ([Rodzina [, Typ [, Proto]]] -> Obiekt gniazda | Otwórz gniazdo podanego typu. Argument rodzinny określa | rodzina adresowa; domyślnie domyślnie do AF_INET. Argument typu określa | Niezależnie od tego, czy jest to strumień (Sock_stream, jest to domyślne) | lub gniazdo Datagram (Sock_dgram). Argument protokołu domyślnie do 0, | Określanie domyślnego protokołu. Argumenty słów kluczowych są akceptowane. |. Obiekt gniazdowy reprezentuje jeden punkt końcowy połączenia sieciowego.
Podsumowując, rozumialiśmy, że socket()
jest funkcją, która tworzy nowy obiekt gniazdowy, a ta funkcja jest dostępna w bibliotece socket
.
Z Python Svn Trunk Socket.py Plik:
Funkcje:
Gniazdo () - Utwórz nowy obiekt gniazdowy
Podobne pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.