Практика: Делаем чат на Python

Практика: Делаем чат на 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. Пора общаться!

Report Page