Эта статья участвует в "Месяце тем Python", подробнее см.Ссылка на мероприятие
В сегодняшнем уроке мы познакомимосновы питонаизПрограммирование сокетов Python. Интерфейс сокетов Python похож на C и Java. Итак, если у вас уже есть опыт программирования на C/Java, вам будет намного проще изучить программирование сокетов на Python.
Но использование сокетов в Python намного проще, что побуждаетБыстрая разработка приложений. Так что не волнуйтесь, если Python — ваш первый язык программирования, но пусть вам повезет.
Python предоставляетДва типа библиотек API, который можно использовать для программирования сокетов. существуетНижний слой, Python использует "socket"libraryРеализуйте клиентские и серверные модули для сетевых протоколов без установления и с установлением соединения. пока ввысший уровень, вы можете использовать егоftplibиhttplibБиблиотеки, такие как Interact, с сетевыми протоколами уровня приложений, такими как FTP и HTTP.
В этом посте мы обсудим наиболее широко используемые"разъем"библиотека. Мы рассмотрим основные функции, предоставляемые библиотекой, которые помогут вам создавать клиентские и серверные модули. Наконец, вы увидите демонстрацию взаимодействия клиент-сервер с примером кода.
Сокет — это самый важный и основной объект, который вам нужно знать, чтобы изучить программирование сокетов на Python. В этом разделе мы представили концепцию сокетов и связанные с ними методы создания сокетов и взаимодействия с ними.
Краткое введение в программирование сокетов Python
Что такое сокет?
Сокет — это конечная точка двустороннего канала связи. Конечная точка представляет собой комбинацию IP-адреса и номера порта.
Для связи клиент-сервер необходимо настроить сокеты на обоих концах, чтобы инициировать соединение, отслеживать входящие сообщения и затем отправлять ответы на обоих концах для установления двусторонней связи.
Сокеты обеспечивают связь между процессами, расположенными на одной машине, или между процессами на разных машинах, работающих в разных средах или даже на разных континентах.
Как создать объект сокета в Python?
Для создания/инициализации сокета мы используемsocket.socket()метод. это на питонеsocketопределяется в модуле. Его синтаксис следующий.
sock_obj = socket.socket(socket_family, socket_type, protocol=0)
Где,
-
гнездо_семейство:Определяет семейство протоколов, используемых в качестве транспортного механизма. Он может иметь одно из двух значений.
- AF_UNIX или
- AF_INET (IP версии 4 или IPv4).
-
сокет_тип:Определяет тип связи между двумя конечными точками. Он может иметь следующие значения.
- SOCK_STREAM (для протоколов, ориентированных на соединение, таких как TCP), или
- SOCK_DGRAM (для протоколов без установления соединения, таких как UDP).
-
протокол:Обычно мы сохраняем это поле или устанавливаем для него нулевое значение.
import socket #for sockets
#实例化一个AF_INET, STREAM socket (TCP)
sock_obj = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print ('Socket Initialized')
Вот как создается объект сокета. Но что, если в приведенном выше примере не удается создать экземпляр сокета. Как вы будете устранять ошибку?
Вам нужно обернуть приведенный выше код в блоки try и кроме блоков Python. С помощью обработки исключений Python вы можете отследить причину ошибки.
#管理python套接字编程中的错误
import socket #for sockets
import sys #for exit
try:
#创建一个 AF_INET, STREAM 套接字 (TCP)
sock_obj = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error as err_msg:
print ('Unable to instantiate socket. Error code: ' + str(err_msg[0]) + ' , Error message : ' + err_msg[1])
sys.exit();
print ('Socket Initialized')
В следующих разделах мы объясним функции, доступные в библиотеке Socket для создания клиент-серверных программ.
Сколько методов сокетов доступно в библиотеке сокетов Python?
Мы можем разделить методы сокетов для программирования сокетов Python на следующие три категории.
- методы серверных сокетов,
- методы клиентских сокетов и
- Общий метод сокета.
Какие методы доступны для серверных сокетов?
Методы сокета сервера
-
sock_object.bind(адрес):
- Этот метод привязывает сокет к адресу (имя хоста, пара номеров портов).
-
sock_object.listen (отставание):
- Этот метод используется для прослушивания соединений, связанных с сокетом.
- Параметр невыполненной работы представляет максимальное количество подключений в очереди.
- Максимальное значение может быть до 5, а минимальное значение должно быть не ниже нуля.
-
sock_object.accept():
- Эта функция возвращает пару (conn, address), где «conn» — это новый объект сокета, используемый для отправки и получения данных по каналу связи, а «address» — это IP-адрес, привязанный к сокету на другом конце канала. .
- Метод ACCEPT() возвращает объект сокета, который отличается от объекта сокета, созданного с помощью socket.socket().
- Этот новый объект сокета предназначен для управления связью с конкретным клиентом, где происходит принятие.
- Этот механизм также помогает серверу одновременно поддерживать соединения с n клиентами.
Какие методы доступны для клиентских сокетов?
Методы клиентских сокетов
-
sock_object.connect():
- Этот метод используется для подключения клиента к хосту и порту и инициации подключения к серверу.
Какие общие методы сокетов доступны в Python?
Общий метод сокета
-
sock_object.recv():
- Используйте этот метод для получения сообщений в конечной точке, когда значением параметра протокола является TCP.
-
sock_object.send():
- Если используется протокол TCP, используйте этот метод для отправки сообщений с конечной точки.
-
sock_object.recvfrom():
- Если используется протокол UDP, вызовите этот метод, чтобы получить сообщение в конечной точке.
-
sock_object.sendto():
- Если параметр протокола — UDP, этот метод вызывается для отправки сообщения из конечной точки.
-
sock_object.gethostname():
- Этот метод возвращает имя хоста.
-
sock_object.close():
- Этот метод используется для закрытия сокета. Удаленная конечная точка не будет получать данные с этого конца.
До сих пор мы перечисляли "socket«Библиотека предоставляет все возможности сокетов для программирования сокетов Python. Далее мы покажем вам рабочий процесс вызова функции сокета для реализации связи клиент-сервер. Пожалуйста, обратитесь к следующему снимку. Он иллюстрирует каждый вызов сокета, необходимый для установления канала с сервером.
Рабочий процесс программирования сокетов Python
На следующей диаграмме показана последовательность вызова методов сокета для конечных точек клиента и сервера.
Итак, из приведенной выше блок-схемы вы узнаете все методы сокетов, необходимые для создания клиент-серверной программы сокетов в Python. Теперь пришло время настроить настоящий клиентский и серверный компоненты Python.
Пример кода взаимодействия клиент-сервер Python
Программа клиент-сервер будет иметь следующие два модуля Python.
- Python-Server.py и
- Python-Client.py.
Сначала рассмотрим код сервера. Обратите внимание, что мы протестировали этот код на Python 3.
Python-Server.py
Этот серверный модуль будет отправлять и получать данные от клиентов.
-
Файл Python-Server.py содержит код для создания серверного сокета, ожидающего получения запроса от клиента.
-
Всякий раз, когда клиент подключается, сервер принимает соединение.
- Затем клиент начнет доставлять сообщения на сервер.
- Сервер обработает эти сообщения и отправит ответ обратно клиенту.
-
В приведенном ниже коде мы также просим пользователя ввести ответ, который он хочет передать клиенту.
import socket
import time
def Main():
host = "127.0.0.1"
port = 5001
mySocket = socket.socket()
mySocket.bind((host,port))
mySocket.listen(1)
conn, addr = mySocket.accept()
print ("Connection from: " + str(addr))
while True:
data = conn.recv(1024).decode()
if not data:
break
print ("from connected user: " + str(data))
data = str(data).upper()
print ("Received from User: " + str(data))
data = input(" ? ")
conn.send(data.encode())
conn.close()
if __name__ == '__main__':
Main()
Python-Client.py
На стороне клиента мы создаем сокет и подключаемся к серверу, используя предоставленные значения хоста и порта.
- В клиентском коде есть цикл while для обмена сообщениями. Он продолжает печатать все данные, которые получает с сервера.
- После этого он вызоветвходитьФункция для запроса ответа клиента. Затем передайте ответ серверу.
- Пользователь также может ввести «q», чтобы остановить связь в любой момент времени.
import socket
def Main():
host = '127.0.0.1'
port = 5001
mySocket = socket.socket()
mySocket.connect((host,port))
message = input(" ? ")
while message != 'q':
mySocket.send(message.encode())
data = mySocket.recv(1024).decode()
print ('Received from server: ' + data)
message = input(" ? ")
mySocket.close()
if __name__ == '__main__':
Main()
Как запустить клиент-серверную программу?
Вам нужно запустить два модуля из разных командных окон, или вы можете запустить их в двух разных экземплярах IDLE.
Сначала вы будете выполнять серверный модуль, затем клиентский. Мы привели полное резюме программы клиент-сервер.
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:54:25) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
RESTART: C:\Users\Techbeamers\AppData\Local\Programs\Python\Python35\Python-Server.py
Connection from: ('127.0.0.1', 50001)
from connected user: Hello TechBeamers
Received from User: HELLO TECHBEAMERS
? Hello Dear Reader
from connected user: You posts are awesome :)
Received from User: YOU POSTS ARE AWESOME :)
? Thank you very much. This is what keeps us motivated.
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:54:25) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
RESTART: C:\Users\Techbeamers\AppData\Local\Programs\Python\Python35\Python-Client.py
? Hello TechBeamers
Received from server: Hello Dear Reader
? You posts are awesome :)
Received from server: Thank you very much. This is what keeps us motivated.
? q
Проверить совместимость программы
Обратите внимание, что мы протестировали приведенный выше клиент-серверный код с версией Python 3. Но вы можете легко преобразовать приведенный выше код для работы на Python 2.7. Вам необходимо заменить следующие строки кода.
data = input(" ? ")
Используйте следующий Python для Python 2.7входитьфункция.
data = raw_input(" ? ")
Мы перечисляем больше различий в пунктах ниже.
- Некоторые другие функции в Python 2.7 (например, печать) не требуют закрывающих фигурных скобок.
- Ни одна из функций сокета Python 2.7 (например, send()/recv() ) не нуждается в декодировании своих возвращаемых значений, в то время как в Python 3 это требуется.
Краткое резюме — Программирование сокетов Python
Мы надеемся, что приведенный выше учебник дал вам новые знания о программировании сокетов Python. Если вам понравилась эта статья и вы хотите увидеть больше, вы можете прочитать ее здесь (Github/Gitee) Следуйте за мной, чтобы увидеть больше информации, вот сводка всего моего оригинального и исходного кода
🧵 Другие статьи по теме
- 30 руководств и советов по Python | Месяц тем Python
- Операторы Python, выражения и отступы | Месяц тем Python
- Ключевые слова Python, идентификаторы и переменные | Месяц темы Python
- Как писать комментарии и многострочные комментарии в Python | Месяц тем Python
- 20 советов по Python, которые должен знать каждый | Месяц тем Python
- Типы данных Python — от базового до углубленного обучения | Месяц тем Python
- 100 основных вопросов для интервью по Python, часть 1 (1–20) | Месяц темы Python
- 100 основных вопросов для интервью по Python, часть 2 (21–40) | Месяц тем Python
- 100 основных вопросов для интервью по Python, часть 3 (41–60) | Месяц темы Python
- 100 основных вопросов для интервью по Python, часть 4 (61–80) | Месяц тем Python
- 100 основных вопросов для интервью по Python, часть 5 (81–100) | Месяц темы Python
Рекомендуемые статьи из прошлого:
- Научить вас использовать Java для игры в нарды
- Интересный способ рассказать об истории JavaScript ⌛
- [Вопросы по практике Java] Вывод программ Java | Седьмой набор (включая анализ)
- ❤️5 расширений VS Code, упрощающих рефакторинг ❤️ (рекомендуется в избранное)
- Говорят, что если в ваших глазах свет, то свет будет везде, куда бы вы ни пошли | Итоги середины 2021 г.
- 140 000 слов | 400+ вопросов JavaScript для интервью 🎓 Ответы 🌠 (Часть 5, вопросы 371-424)
Если вы действительно узнали что-то новое из этой статьи, ставьте лайк, добавляйте в закладки и делитесь с друзьями. 🤗Наконец, не забудьте поддержать ❤ или 📑