Практика: Делаем чат на Python
RuByte • Студия Питониста
Библиотека socket в Python предоставляет функции для работы с сокетами, которые позволяют обмениваться данными между клиентом и сервером. В этом практическом руководстве мы создадим простой чат между клиентом и сервером, используя библиотеку socket.
Шаг 1: Создание сервера
Начнем с создания сервера в файле server.py. Сначала импортируем библиотеку socket:
import socket
Затем создадим объект сокета, указав тип сокета (AF_INET для IPv4) и протокол (SOCK_STREAM для TCP):
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Установим хост и порт, через которые будем общаться:
host = '127.0.0.1'
port = 12345
Создадим связь между сервером и портом:
server_socket.bind((host, port))
Укажем серверу слушать соединения:
server_socket.listen(5)
Далее создадим цикл для приёма данных:
client_socket, addr = server_socket.accept()
Шаг 2: Создание клиента
Теперь создадим клиента в файле client.py. Сделаем те же самые шаги, что и для сервера, только для клиента:
import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = '127.0.0.1'
port = 12345
client_socket.connect((host, port))
Теперь клиент подключен к серверу и готов обмениваться сообщениями.
Шаг 3: Обмен сообщениями
Наконец, создадим цикл для обмена сообщениями между клиентом и сервером:
while True:
message = input("You: ")
client_socket.send(message.encode())
data = client_socket.recv(1024)
print("Server:", data.decode())
Теперь у нас есть простой чат между клиентом и сервером, где они могут обмениваться сообщениями.
Шаг 4: Обработка ошибок и закрытие соединения
Важно обработать возможные ошибки, которые могут возникнуть в процессе обмена сообщениями. Для этого добавим блок try-except в нашем коде:
while True:
try:
message = input("You: ")
client_socket.send(message.encode())
data = client_socket.recv(1024)
print("Server:", data.decode())
except Exception as e:
print("An error occurred:", e)
break
Также не забудем закрыть соединение после завершения работы с клиентом и сервером:
client_socket.close()
server_socket.close()
Итог
Итоговый код файла server.py:
import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = '127.0.0.1'
port = 12345
server_socket.bind((host, port))
server_socket.listen(5)
client_socket, addr = server_socket.accept()
while True:
try:
message = client_socket.recv(1024)
print("Client:", message.decode())
reply = input("You: ")
client_socket.send(reply.encode())
except Exception as e:
print("An error occurred:", e)
break
И вот client.py:
import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = '127.0.0.1'
port = 12345
client_socket.connect((host, port))
while True:
try:
message = input("You: ")
client_socket.send(message.encode())
data = client_socket.recv(1024)
print("Server:", data.decode())
except Exception as e:
print("An error occurred:", e)
Тестирование чата
Откройте два терминала и запустите сервер в одном из них: server.py. Затем откройте другой терминал и запустите клиент: client.py.
Теперь вы успешно создали простой чат клиент-сервер с использованием библиотеки socket в Python. Пора общаться!