Рубрики
Без рубрики

Как создать чат в Python?

В этой статье мы пойдем с начала до конца и создать чат в Python. Прежде чем мы погрузимся, давайте наберем концептуальное понимание того, что такое чат.

Автор оригинала: Pankaj Kumar.

В этой статье мы пойдем с начала до конца и создать чат в Python. Прежде чем мы погрузимся, давайте наберем концептуальное понимание того, что такое чат.

Оглавление

  • Что такое чат?
  • Что такое розетка?
  • Chatroom Server-Side Ground Programming
    • 1. Импорт необходимых библиотек
    • 2. Создание розетки и извлечение имени хоста
    • 3. Привязка хоста и порта
    • 4. Прослушивание подключений
    • 5. Принятие входящих соединений
    • 6. Хранение данных входящих подключений
    • 7. Доставка пакетов/сообщений
    • Полный код чата сервера
  • Chaproom Client-Side Bote Programming
    • 1. Импорт библиотек
    • 2. Создание сокета и принимая имя хоста ввода пользователя
    • 3. Подключение к серверу
    • 4. Получение пакетов/сообщений с сервера
    • Полный клиент-сторонник чата
  • Заключение
  • Рекомендации

Что такое чат?

Комната чата – это пространство для людей по всему миру, чтобы общаться друг с другом о различных темах. Темы могут варьироваться от чего-либо, таких как разработка приложений к любым рецептам, сделанным на кухне. Чаты – отличные платформы для обучения, как общаться. В этой статье я познакомимся с вами, как сделать небольшой чат, используя основные концепции с розетками и Python.

Теперь в этом уроке мы собираемся построить приложение для чата в реальном времени, используя розетки в Python. Давайте начнем с концепции розетки.

Что такое розетка?

Гнездо в сетевых терминологиях, служит промежуточным соединением слоя приложений к транспортному слою в протоколе TCP/IP. Эти сетевые розетки присутствуют на стороне клиента и на стороне сервера.

Программирование сокетов – это способ подключения двух узлов в сети для взаимодействия друг с другом. Один разъем (узел) слушает определенный порт на IP, а другой сокет достигает другого, чтобы сформировать соединение. Сервер образует сокет слушателя, пока клиент достигает сервера.

Модель клиентского сервера

Chatroom Server-Side Ground Programming

Сервер принимает соединения от клиентов для установления сетевого интерфейса. Нам нужно обеспечить, чтобы клиенты/пользователи были уникальными. Следовательно, мы назначаем уникальный IP-адрес каждому клиенту. Однако многие пользователи предпочитают идентифицировать имя пользователя. Следовательно, мы будем назначать имена пользователей.

Роль сервера состоит в том, чтобы собрать какие-либо входящие сообщения и доставлять их другим клиентам/клиентам.

Давайте начнем кодировать серверную сторону. Во-первых, создайте файл с именем server.py Отказ

1. Импорт необходимых библиотек

import socket
import sys
import time

Во-первых, мы импортируем розетка Библиотека, потому что эта библиотека Python содержит необходимые функции для реализации розетки.

sys Библиотека предоставляет системный модуль, который отвечает за предоставление данных, связанных с системным каталогом, функциями и методами.

время Модуль позволяет нам выполнять многочисленные действия о преобразованиях и описаниях времени.

2. Создание розетки и извлечение имени хоста

new_socket = socket.socket()
host_name = socket.gethostname()
s_ip = socket.gethostbyname(host_name)
port = 8080

розетка () Функция – конструктор библиотеки сокетов для создания розетки.

Как только сокет создан, мы извлеките имя хоста/локального устройства, используя gethostname () , что опять же функция библиотеки сокета.

gethostname () Когда отправлено с host_name В качестве параметра извлекает IP-адрес другого пользователя, и этот IP хранится в S_IP Отказ

порт Назначается как 8080. Этот порт выбран, потому что это бесплатный порт по умолчанию на большинстве машин. Как правило, порты, такие как 3000, 5000 и т. Д. Используются для других приложений, таких как Express.js. Вы также можете запустить его на любом порту, таком как «1234».

3. Привязка хоста и порта

new_socket.bind((host_name, port))
print( "Binding successful!")
print("This is your IP: ", s_ip)

Теперь мы связываем порт и хост вместе с помощью функции связывания, которая вызывается на объекте сокета new_socket Отказ Как только связывание успешно, он печатает «Привязка успешной!» на консоли.

4. Прослушивание подключений

name = input('Enter name:')
new_socket.listen(1)

Здесь мы используем Слушать () Функция, которая принимает один аргумент, а именно Number_of_connections Отказ Этот параметр может быть любое целое число, такое как 1,2,3, …

5. Принятие входящих соединений

conn, add= new_socket.accept()
print("Received connection from ", add[0])
print('Connection Established. Connected From: ',add[0])

Первая переменная, которая является Conn подключен к гнездо и переменной «Add» назначается IP-адресу клиента.

6. Хранение данных входящих подключений

client = (conn.recv(1024)).decode()
print(client + ' has connected.')
conn.send(name.encode())

Детали входящего соединения хранятся в переменме Client_Name. Имя клиента может быть максимум 1024 байта. Он декодируется на сервере и печатает сообщение о том, что он был подключен. Затем сервер отправляет имя хоста.

7. Доставка пакетов/сообщений

while True:
    message = input('Me : ')
    conn.send(message.encode())
    message = conn.recv(1024)
    message = message.decode()
    print(client, ':', message)

Пользователь входит в сообщение. Это закодировано с использованием кодировать () а затем отправлено через розетку. Сообщение отправлено с помощью Отправить () Функция, которая вызывается на объекте подключения, созданного во время призыва принять функцию () ранее. Затем он отображает сообщение «Сообщение было отправлено …».

Входящее сообщение получено с использованием Recv () Conn Object. Он может получить до 1024 байтов информации. Сообщение декодируется на стороне сервера, используя декодировать () Отказ

Полный код чата сервера

Вот полный код чата Server Side:

import time, socket, sys

new_socket = socket.socket()
host_name = socket.gethostname()
s_ip = socket.gethostbyname(host_name)

port = 8080

new_socket.bind((host_name, port))
print( "Binding successful!")
print("This is your IP: ", s_ip)

name = input('Enter name: ')

new_socket.listen(1) 


conn, add = new_socket.accept()

print("Received connection from ", add[0])
print('Connection Established. Connected From: ',add[0])

client = (conn.recv(1024)).decode()
print(client + ' has connected.')

conn.send(name.encode())
while True:
    message = input('Me : ')
    conn.send(message.encode())
    message = conn.recv(1024)
    message = message.decode()
    print(client, ':', message)
Выход сервера в командной строке

Chaproom Client-Side Bote Programming

Мы создадим файл с именем Client.py И создайте наш код для подключения и связи с сервером чата.

1. Импорт библиотек

import socket
import sys
import time

Мы импортируем те же библиотеки, используемые на сервере.

2. Создание сокета и принимая имя хоста ввода пользователя

socket_server = socket.socket()
server_host = socket.gethostname()
ip = socket.gethostbyname(server_host)
sport = 8080
  • Разъем на сервере создается с помощью розетка () метод.
  • Имя хоста сервера извлекается на стороне клиента и сохраняется как server_host Отказ
  • IP-адрес хранится в IP Отказ
  • Порт сервера хранится как 8080 в Спорт Переменная.

Обратите внимание, этот порт должен совпадать с портом, упомянутым на стороне сервера.

3. Подключение к серверу

print('This is your IP address: ', ip)
server_host = input('Enter friend\'s IP address:')
name = input('Enter Friend\'s name: ')

socket_server.connect((server_host, sport))

Детали сервера (друга) введены первыми. Обратите внимание, что важно ввести точный IP-адрес, в противном случае связь будет не удастся.

Имя хоста сервера и порту связаны вместе и подключены к розетке.

4. Получение пакетов/сообщений с сервера

socket_server.send(name.encode())
server_name = socket_server.recv(1024)
server_name = server_name.decode()

print(server_name,' has joined...')
while True:
    message = (socket_server.recv(1024)).decode()
    print(server_name, ":", message)
    message = input("Me : ")
    socket_server.send(message.encode())  

Для получения сообщений Socket_Server вызывает функцию RECV () для приема 1024 данных. Это хранится в объекте сообщения и декодировано с использованием функции декодирования (). Затем сообщение печатается с именем хоста сервера и полученное сообщение.

Клиент может ввести любое сообщение в качестве ввода и кодировать то же самое и отправить его на сервер с помощью сокета.

Следовательно, мы развернули комнату чата в реальном времени с помощью розеток и Python.

Полный клиент-сторонник чата

Вот полный код клиентской стороны нашего чата:

import time, socket, sys

socket_server = socket.socket()
server_host = socket.gethostname()
ip = socket.gethostbyname(server_host)
sport = 8080

print('This is your IP address: ',ip)
server_host = input('Enter friend\'s IP address:')
name = input('Enter Friend\'s name: ')


socket_server.connect((server_host, sport))

socket_server.send(name.encode())
server_name = socket_server.recv(1024)
server_name = server_name.decode()

print(server_name,' has joined...')
while True:
    message = (socket_server.recv(1024)).decode()
    print(server_name, ":", message)
    message = input("Me : ")
    socket_server.send(message.encode())  
Вывод клиента в командной строке

Заключение

Скопируйте свои полные фрагменты кода, сохраните их как Server.py и Client.py соответственно, и у вас будет первый чат в Python! Очень легко работать, и я уверен, что вы узнаете много практических аспектов программирования сокетов.

Рекомендации

https://docs.python.org/3/library/socket.html

https://docs.python.org/3/library/socketserver.html