Программирование сокетов Python — сервер, пример клиента
Ученики, добрый день! В нашем предыдущем уроке мы обсуждали модуль модульного тестирования Python. Сегодня мы рассмотрим пример программирования сокетов Python. Мы создадим сервер сокетов Python и клиентские приложения.
Программирование сокетов Python
Чтобы понять программирование сокетов на Python, нам нужно знать о трех интересных темах — Socket Server, Socket Client и Socket. Итак, что такое сервер? Что ж, сервер — это программное обеспечение, которое ожидает запросов клиентов и соответственно обслуживает или обрабатывает их. С другой стороны, клиент является заказчиком этой услуги. Клиентская программа запрашивает некоторые ресурсы у сервера, и сервер отвечает на этот запрос. Сокет — это конечная точка двунаправленного канала связи между сервером и клиентом. Сокеты могут взаимодействовать внутри процесса, между процессами на одной машине или между процессами на разных машинах. Для любой связи с удаленной программой мы должны подключаться через порт сокета. Основная цель этого руководства по программированию сокетов — познакомить вас с тем, как сервер сокетов и клиент взаимодействуют друг с другом. Вы также узнаете, как написать программу сервера сокетов Python.
Пример сокета Python
Ранее мы говорили, что сокет-клиент запрашивает некоторые ресурсы у сокет-сервера, и сервер отвечает на этот запрос. Поэтому мы разработаем как серверную, так и клиентскую модель, чтобы каждый из них мог взаимодействовать с ними. Шаги можно рассматривать так.
- Программа сервера сокетов Python сначала выполняется и ожидает любого запроса
- Сначала диалог будет инициировать клиентская программа сокета Python.
- Затем серверная программа будет отвечать на запросы клиентов в соответствии с запросами.
- Клиентская программа завершится, если пользователь введет сообщение «пока». Серверная программа также завершится, когда завершится клиентская программа, это необязательно, и мы можем оставить серверную программу работать неопределенно долго или завершить ее с помощью определенной команды в клиентском запросе.
Сокет-сервер Python
Мы сохраним программу сервера сокетов Python как socket_server.py
. Чтобы использовать соединение сокета Python, нам нужно импортировать модуль сокета. Затем последовательно нам нужно выполнить какую-то задачу, чтобы установить соединение между сервером и клиентом. Мы можем получить адрес хоста, используя функцию socket.gethostname()
. Рекомендуется использовать адрес порта выше 1024, поскольку номера портов меньше 1024 зарезервированы для стандартного интернет-протокола. См. приведенный ниже пример кода сервера сокетов Python, комментарии помогут вам понять код.
import socket
def server_program():
# get the hostname
host = socket.gethostname()
port = 5000 # initiate port no above 1024
server_socket = socket.socket() # get instance
# look closely. The bind() function takes tuple as argument
server_socket.bind((host, port)) # bind host address and port together
# configure how many client the server can listen simultaneously
server_socket.listen(2)
conn, address = server_socket.accept() # accept new connection
print("Connection from: " + str(address))
while True:
# receive data stream. it won't accept data packet greater than 1024 bytes
data = conn.recv(1024).decode()
if not data:
# if data is not received break
break
print("from connected user: " + str(data))
data = input(' -> ')
conn.send(data.encode()) # send data to the client
conn.close() # close the connection
if __name__ == '__main__':
server_program()
Итак, наш сервер сокетов Python работает на порту 5000 и будет ждать запроса клиента. Если вы хотите, чтобы сервер не завершал работу при закрытии клиентского соединения, просто удалите цикл Python while, используемый для бесконечного запуска серверной программы, и продолжайте ждать запроса клиента.
Сокет-клиент Python
Мы сохраним клиентскую программу сокета python как socket_client.py
. Эта программа аналогична серверной программе, за исключением привязки. Основное различие между серверной и клиентской программой заключается в том, что в серверной программе необходимо связать адрес хоста и адрес порта вместе. См. приведенный ниже пример кода клиента сокета Python, комментарий поможет вам понять код.
import socket
def client_program():
host = socket.gethostname() # as both code is running on same pc
port = 5000 # socket server port number
client_socket = socket.socket() # instantiate
client_socket.connect((host, port)) # connect to the server
message = input(" -> ") # take input
while message.lower().strip() != 'bye':
client_socket.send(message.encode()) # send message
data = client_socket.recv(1024).decode() # receive response
print('Received from server: ' + data) # show in terminal
message = input(" -> ") # again take input
client_socket.close() # close the connection
if __name__ == '__main__':
client_program()
Вывод программирования сокетов Python
pankaj$ python3.6 socket_server.py
Connection from: ('127.0.0.1', 57822)
from connected user: Hi
-> Hello
from connected user: How are you?
-> Good
from connected user: Awesome!
-> Ok then, bye!
pankaj$
pankaj$ python3.6 socket_client.py
-> Hi
Received from server: Hello
-> How are you?
Received from server: Good
-> Awesome!
Received from server: Ok then, bye!
-> Bye
pankaj$
Обратите внимание, что сервер сокетов работает на порту 5000, но клиенту также требуется порт сокета для подключения к серверу. Этот порт назначается случайным образом при вызове подключения клиента. В данном случае это 57822. Итак, это все, что касается программирования сокетов Python, примеров программ сервера сокетов python и клиентов сокетов. Ссылка: Официальная документация