Клиент:
import socket
HOST = "" # удаленный компьютер (localhost)
PORT = 33333 # порт на удаленном компьютере
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((HOST, PORT))
sock.send("ПАЛИНДРОМ")
result = sock.recv(1024)
sock.close()
print "Получено:", result
Примечание:
В примере использованы русские буквы: необходимо указывать кодировку.
Прежде всего, нужно запустить сервер. Сервер открывает сокет на локальной машине на порту 33333, и адресе 127.0.0.1. После этого он слушает ( listen()
) порт. Когда на порту появляются данные, принимается ( accept()
) входящее соединение. Метод accept()
возвращает пару — Socket–объект и адрес удаленного компьютера, устанавливающего соединение (пара — IP–адрес, порт на удаленной машине). После этого можно применять методы recv()
и send()
для общения с клиентом. В recv()
задается число байтов в очередной порции. От клиента может прийти и меньшее количество данных.
Код программы–клиента достаточно очевиден. Метод connect()
устанавливает соединение с удаленным хостом (в приведенном примере он расположен на той же машине). Данные передаются методом send()
и принимаются методом recv()
— аналогично тому, что происходит на сервере.
Модуль socket
имеет несколько вспомогательных функций. В частности, функции для работы с системой доменных имен (DNS):
>>> import socket
>>> socket.gethostbyaddr('www.onego.ru')
('www.onego.ru', [], ['195.161.136.4'])
>>> socket.gethostbyaddr('195.161.136.4')
('www.onego.ru', [], ['195.161.136.4'])
>>> socket.gethostname()
'rnd.onego.ru'
В новых версиях Python появилась такая функция как socket.getservbyname()
. Она позволяет преобразовывать наименования Интернет–сервисов в общепринятые номера портов:
>>> for srv in 'http', 'ftp', 'imap', 'pop3', 'smtp':
... print socket.getservbyname(srv, 'tcp'), srv
...
80 http
21 ftp
143 imap
110 pop3
25 smtp
Модуль также содержит большое количество констант для указания протоколов, типов сокетов, коммуникационных доменов и т.п. Другие функции модуля socket можно при необходимости изучить по документации.
Сообщения электронной почты в Интернете передаются от клиента к серверу и между серверами в основном по протоколу SMTP( Simple Mail Transfer Protocol, простой протокол передачи почты). Протокол SMTP и ESMTP (расширенный вариант SMTP) описаны в RFC 821 и RFC 1869. Для работы с SMTP в стандартной библиотеке модулей имеется модуль smtplib
. Для того чтобы начать SMTP–соединение с сервером электронной почты, необходимо в начале создать объект для управления SMTP–сессией с помощью конструктора класса SMTP
:
smtplib.SMTP([host[, port]])
Параметры host
и port
задают адрес и порт SMTP–сервера, через который будет отправляться почта. По умолчанию, port=25
. Если host
задан, конструктор сам установит соединение, иначе придется отдельно вызывать метод connect()
. Экземпляры класса SMTP имеют методы для всех распространенных команд SMTP–протокола, но для отправки почты достаточно вызова конструктора и методов sendmail()
и quit()
:
# -*- coding: cp1251 -*-from smtplib import SMTP
fromaddr = "student@mail.ru" # От кого
toaddr = "rnd@onego.ru" # Кому
message = """From: Student
Конец ознакомительного отрывка
Купить книгу