// Проекты с Python #3 // Создание чата (Сервер / Клиент) //
HTML-код
- Опубликовано: 17 дек 2017
- В данном уроке представлена реализация чата с криптографической отправкой сообщений и технологией TCP/IP при помощи языка программирования Python 3.6.
-------------------------------------------------------------------------
Файл 1 (Server): yadi.sk/d/Zhb0ph_33QjiQR
Файл 2 (Client): yadi.sk/d/Iv0i4bO23QjiR4
-------------------------------------------------------------------------
Чат был лишь улучшен, а не создан с нуля. Видео которое я взял за основу: • Python Advanced Tutori... . Данный чат я переделал таким образом, чтобы пользователи могли общаться одновременно без обновления чата. Также была добавлена криптографическая отправка сообщения на сервер и чтение зашифрованного сообщения клиентом. И также программу перенёс с версии Python2 на версию Python3. Наука
Впечатляет. Супер! За каждый символ пояснение идет. молодец. спс👍
Огромное спасибо вообще за наличие таких уроков! Python настолько гибкий, но в рунете слишком мало достойных проектов по нему, из-за этого и хочется его забросить
@Davidov Oleg как найти даркнетовский форум
Хороший урок и идея классная!
Спасибо, огонь!
Спосибо, будет мне материал для курсовой
Большое спасибо
Спасибо, классный урок! Правда, чат я не пишу, но подчерпнул несколько идей =)
чётко, в натуре чётко!
вот отдельное спасибо за ссылки на файлы... НЕ собираюсь красьть ии использовать как-то. Но Просто очень часто под уроками нет ссылок на исходники. Они часто нужны, если почерпнул, что-то полезное из видео, но мотать на нужное мместо в видео - вообще не удобно. Так, что респект. Ну и вообще за бодрость голоса - респект
Исправлю тебя
decode и encode переводят кодировку utf-8 в байты и наоборот, а не помогают декодировать
п.с. с помощью send и sendto отправляются именно байты
Лучший!
Топ!!
спасибо
Cпс большое
SOCK_DGRAM - это UDP
Ага
Афффигенннноо
AF_INET - семейство сетевых сокетов, SOCK_DGRAM - тип сокетов дейтаграмного типа. Вот и получается, что ты используешь не TCP (для этого необходимо использовать SOCK_STREAM), а UDP (который использует сокеты дейтаграмного типа). Улыбнула ).
Спасибо, то я уже хотел написать - "Так блэд, какой тут tcp/ip, когда тут udp".
Спасибо что подметили,я тоже уже собирался писать за udp.
Здесь не имеется ввиду именно протокол TCP а уровень в стеке протокола TCP/Ip потому что можно сделать клиент сервер и на канальном уровне а этот на транспортном уровне TCP
спс
Круто! Все просто минимально и понятно! И главное - Работает! :)
Советую в исходном проекте изменить соответствующую строку с добавлением вывода своего локального IP (host): print("[ Server Started IP: "+host+" ]").
Тогда можно в программе client в строке 33 изменить IP на свой IP с запущенного окна server. Только тогда будет работать. И еще сервер можно выключить и снова включить - соединение клиентов восстанавливается под теми же именами.
Спасибо Бро )
Подскажете что за дистрибутив стоит? arch?
Чел, спасибо за то, что ты делаешь; будет ли возрождение злокодинга на Python?
Мне пайтон (я его только начал изучать) - своим синтаксисом чем-то напоминает Perl в те времна когда я кодил на нем - это было приятно и "лампово"))) Потом подъехал ПХП. И вот сейчас Пайтон почему-то возвращает в то состояние, когда возился с кодом на Перле...
Обычно разрешается только одно использование адреса сокета (протокол/сетевой адрес/порт)
у меня ошибка в 9 строке у сервера
на кокаом саите ты скачал прогу для програмирования или эту панель можно наити в виндовсе?
Зачем делать переменную quit, есть можно просто написать break?
Флаги?
Супер! А можно это связать все с HTML и задеплоить на
PythonAnywhere или выложить на сервер и создать доменное имя?
При вводе никнейма на клиенте, на сервере ничего не отображается, а при попытке отправить вторую строку - клиент просто завершает работу, что может быть?
странно. я запустил сервер и двух клиентов, с одного отправил сообщение, но на сервере это не отобразилось, и второй клиент это сообщение не увидел.
Можете объяснить, в чем проблема, пожалуйста.
Подскажите плиз: если я запилю сайт на джанго, то я смогу сделать а/в тестирование без джаваскрипта?
Привет, это у тебя убунту ?) Можешь обзор своей системы сделать ?)
Спасибо за урок! У меня появился вопрос, можно ли как-нибудь на сокетах сделать так, чтобы сервер не выключался после переподключения клиента?
Конечно можно
Как называется icon pack? И будет Разбор вашего оформления?
Можно, урок с пир2пир протоколом по чату
Как сделать такой терминал?(У стандартного Arch другой)
Что делать ? Запускаю ввожу имя а сервер отключается
[ Server IP: 192.168.100.14 ]
[ Server Started ]
[192.168.100.14]=[50151]=[2019-05-14-22.09.58]/
[ Server Stopped ]
На строке data, addr = s.recvfrom(1024) программа зависает, можете помочь?
очень круто получилось. жаль ошибки вечные(хоть у автора их и нет), да и запустить не знаю как
В cmd проекта пропиши: python server.py
Привет. Какой дистрибутив линукса у тебя установлен?
sTiKyt А что за скин?
Rакая у вас здесь графическая оболочка?
Функция ожидания сообщения recevind нагружает поток на соточку! Есть какое нибудь решение?
time.sleep не помогает
мб асинхронность?
у меня все запускается,сервере не отображается не вход не отправку сообщение
короче в коде клиента тебе надо изменить переменную server на свой собственный ip (в cmd вбиваешь команду ipconfig и в появившемся тексте ищешь IPv4-адрес там у тебя прописан твой ip)
Объясню без прогерских терминов. Чтобы заработало, нужно написать print(host) после третьей и четвертой строки. Запускаете сервер, узнаете хост, он там выйдет. Этот хост пишите в клиенте на 32 строке, вместо того, что в кавычках. Заработает, обещаю)
Приветствую, каким дистрибутивом пингвина пользуетесь?
Арч у него
Сколько python изучаешь?
Я не шарю, но это работает пк - смартфон, если они на одной cети wifi?
Кочнечно, урок классный, объяснение чуть ли не каждого символа помогло. Но как же запустить этот чудо-чат?
в cmd>python server.py
и клиенты также только на разных компьютерах (можно и на одном для теста, для этого надо запускать отдельный cmd)
@@sergeykmetyuk6521 можно сократить python до py
у кого не работает, в client.py ищите server = ("192.168.0.101",9090) и оставляйте server = ("",9090)
СПАСИБО ОГРОМНОЕ
пустые кавычки не помогли, а вот изменение на свой локальный ip - да
@@superpadush методом "тыка"
Спасибо)
Лучше вместо айпи прописать socket.gethostbyname(socket.gethostname())
Это сразу возьмёт твой локальный айпи.
Зачет за Arch linux
Это гном))
@@Dmitrij_D Arch linux.
При запуске клиента-->
Traceback (most recent call last):
File "client.py", line 47, in
s.sendto(("["+alias + "] => join chat ").encode("utf-8"),server)
OSError: [WinError 10051] Сделана попытка выполнить операцию на сокете при отключенной сети
мб очень поздно, но ты не запустил сначала сам сервер
получилось исправить ошибку?
я запускаю так, но всё равно не работает
@@shiro_que всё равно не работает
почему у меня в сервере не отображается?
открой client.py и замени там ip на свой
когда я ввожу Name потом жму Enter ничего не происходит! поможеш?
Измени айпи и порт
Зачем переменная quit, если у есть оператор break?
Работает только на Linux?
Мне выдаёт ошибку:
Traceback (most recent call last):
File "C:\Users\kmasi\Desktop\Коды\online meseger\client.py", line 47, in
s.sendto(("["+alias + "] => join chat ").encode("utf-8"),server)
OSError: [WinError 10051] Сделана попытка выполнить операцию на сокете при отключенной сети
Скорее всего вы были вне сети в тот момент
Читать умеешь?
OSError: [WinError 10051] Сделана попытка выполнить операцию на сокете при отключенной сети
у меня ошибка A socket operation was attempted to an unreachable network
Здравствуйте, подскажите пожалуйста, у меня не работает чат, связанно ли это с тем, что у меня Windows?
@dan4ktop 12 у меня 3 7 1, но всё ровно не работает
Когда один из пользователей отключается и другой отправляет сообщение - сервер выключается "Server stopped"
Не могу вести переписку, не понимаю в чем проблема
Интересует такой вопрос: могу ли я поставить что-то типа такого на выделенный сервер и подключиться к нему не находясь в одной локальной сети? Если да - то как это сделать?
Конечно!
Это типа IRC
берешь и делаешь. оч странный вопрос какой-то. если сервер сидит за NATом, то укажи там перенаправление с внешнего адреса на внутренний(локальный(короче на тот, где у тебя запускается программа-сервер)) и играйся себе на здоровье.
Ребят, кто-о сталкивался с этой ошибкой?
Traceback (most recent call last):
File "C:\Users\Asus\Documents\programs in python\kill\server (1).py", line 9, in
s.bind((host,port))
OSError: [WinError 10048] Обычно разрешается только одно использование адреса сокета (протокол/сетевой адрес/порт)
На какой модуль оно жалуется?
у тебя на етом порте уже есть процес
уничтожь его и перекомпиль
Пишу точь-в-точь как ты , пишет Invalid Syntex (in line 27 (except: ^))Что делать подскажи пожалуйста
ошибка на 27 строке, а именно не понимает что там написано т.к ты не загрузил библиотеки
Что означает [user@server Python]$python client.py , это библеотеки или сто?
это запуск скрипта client.py c помощью Python это в терминале Linux
а как заставить работать с 2 разными пк
Моя теория такая: (я ещё не качал её)
1. Скачать хамачи и запустить
2. Скопировать айпи IPV4
3.вставить там в переменную айпи с портом (порт оставить)
4. И скинуть файл клиент на другой пк
5.в cmd файл клиента открыть и по логике все заработает
Привет если слишиш можеш сделать плиз еще так штоб перед client видавало два вибора принять зашифрованое или не зашифрованое
а что делать если все работает но сообщение не отображает и даже не пишет что кто то присоединился ??
а он просто показывает один файл, а запускает другой файл
Он назвал функцию receiving и передал туда два значения
потом в переменной rT у него функция даже по-другому написана и ошибки не відает, а должно, знач дркгой файл компилит и втирает
А вместо server = ("192.168.0.101",9090) нужно вбивать свой айпишник? у меня на этом айпишнике ничего не работает
дак потому что в твоей локальной сети у твоего компа другой адрес типа 192.168.x.x простейший способ узнать свой локальный ip - зайти в командную строку и прописать ipconfig, в строке IPv4-адрес и будет твой(только если у тебя отображается несколько интернет адаптеров, смотри у адаптера с названием "Подключение по локальной сети" если интернет кабель к компу напрямую либо "Адаптер беспроводной локальной сети Беспроводное сетевое соединение" если у тебя вайфай)
Этот код будет работать только в локальной сети. Как работать через NAT?
Вот: habrahabr.ru/post/304150/
@@CryptoFunIT спасибо
Залить сервер на глобальный адрес и в клиенте изменить адрес на тот на который залил сервак
@@CryptoFunIT на Винде локально не срабатывает :(
всё запускается, но когда ввожу имя сервер выключается, подскажите что делать?
В конче всего напеши строку input()
Magic Top_10 спасибо
Как я могу сделать такой чат, если у меня будет VDS?
Я заливаю server.py на Ubuntu 16.04 через FileZila.
Далее, я обновляю Python до версии 3.7.0.
Вписываю ./server.py и у меня появляются ошибки.
P.S. Делаю я всё это потому, что у меня нету открытых портов, но чтоб я мог бы общаться с друзьями с помощью данного чата.
А у тебя venv стоит? Просто если venv там должны быть установлены библиотеки которые нужны для работы программы.
RUclips Administration я уже решил эту проблему, но появилась другая... Там типо проблема с кодировкой.
Я запускаю сервер, потом клиент, логинюсь к чату, в консоли это отображается, но как что-то пишу в чат с клиента, то сервер закрывается. Насколько я понял, то проблема в кодировке.
зачем такая морока с vds? лично я на компе и не открывал порт. выбрал для сервера порт 9191 и в NAT роутера поставил перенаправление со внешнего адреса на внутренний(на котором запускается сервак) по данному порту и норм пашет. любые онлайн проверки показывают, что порт 9191 у меня закрыт
Круто, жаль только, что не работает
ip настрой
Привет. Как с тобой связаться ?. Есть предложение!
vk.com/number571
Shikarnye uroki!
Obiasniaesh vsyo prosto kak bog!
ничего не работает что делать ? сервер запущен но сообщения не приходят
+
9:54 - Видимо этот же код используется в Zoom;
кто понял прикол ставь 👍👍👍
Что за терминал?
linux
По коду, как я понял, уже высказались до меня, так что дам один совет. Прежде чем учить, будьте добры погрузиться в преподаваемый материал с головой, а то получаются такие объяснения: "Здесь пишем во так, потому что иначе у вас будет много ошибок". Возможно, вы и представляете, о чем говорите, но если так, расскажите об этом подробнее. Честно говоря, появилось ощущение, что материал кусками был схвачен на разных статьях, форумах, и т. д. и полноты картины в голове не сложилось. Без обид, просто на будущее. Удачи.
Что делать если не работает. Открываю сервер, потом открываю клиет, но НЕ РАБОТАЕТ. Сервер не видит, что кто-то присоединился и не видит сообщения. Клиенты тоже нифига не видят. ЧТО ДЕЛАТЬ?
@sTiKyt да закрыты. А они должны быть открытыми?
@sTiKyt Так я пытался вообще это на своём ноутбуке сделать. Что бы оно заработало в локальной сети или на моём ноутбуке, всё равно нужны открытые порты?
@sTiKyt -. Я запускал сервера майна. Они не работали в сети, но на моём компе они работали
Почему-то у меня не работает
не работает скорее всего потому что ты не скачал тайм и сокет
@@web_hack6573 их не нужно скачивать, они встроенные
Не работает
Спасибо, самый нормальный урок по созданию чата.
Я не понял: зачем rt.join() в конце
поток останавливает
Какой это дистрибутив линукса?
Ubuntu 18.04 вроде она
host = socket.gethostbyname(socket.gethostname())
возвращает 127.0.1.1 (linuxmint19)
Смысла вообще в этом нету. Пустые кавычки оставь)
Тогда не только локально, но и внешние сообщения на порт можешь принимать
Ошибка вылазит: socket.gaiereor: [Errno 11004] getaddrinfo failed
Решил. Частично. Не нашёл другого способа, поэтому теперь прога запрашивает айпи при входе
А когда злокодинг?
Точно сказать не смогу. В данный момент занят криптографией и реализацией шифров Решётки, ADFGVX, Хилла и Энигмы. Но и идеи по злокодингу имеются, так что остаётся их лишь только реализовать.
Crypt&Fun [ IT ] Кстати энигма классная идея, про 2 мировую
Вопрос, скопировал данные файлы, запускаю, запускается, но чат не работает, не пишет на сервере что кто-то зашел, сообщения не видны, что не так?
Измени ip, по которому подключается клиент, на 127.0.0.1 и все заработает
@@vladtemriuk4621 у меня на локалхосте не заработало.
дописал строчку в сервере, чтоб он вывел айпишник, на котором запустился и прописал в клиенте этот айпи. может кому такой способ поможет
@@senya_senechkin как?
@@Domixmokut просто допиши на сервере print(host) после присваивания адреса переменной host
@@Domixmokut а вообще лучше бы тебе разобраться, как работают сокеты и udp протокол и написать сервер и клиент под себя. я так сделал и мой сервак гораздо функциональнее этого + есть авторизация, логирование и другие нужные штуки. самописный чат очень крутая штука, если не нравится, когда большой брат следит за тобой. прикрутить шифрование минутное дело, зато точно будешь знать, что никто за тобой не следит, а если и следит, то в жизни ничего не расшифрует, не имея доступа к исходникам.
как сделать чат с лс
ну к примеру через команду по типу /msay 'получатель' 'отправитель' , на сервере проверять есть ли /msay в сообщении и если да , то только этому нику, надо еще словарь с адресами к никам сделать
socket.gaierror: [Errno 11004] getaddrinfo failed
разобрался?
@@masyock1616 нет
@@m0rlandhey542 нет)
Спасибо. Только учусь Python но все четко и понятно. К стати по сабжу работы с сетью наткнулся на вот такой проект. Советую - мне зашло ruclips.net/video/qmWbsLKKduc/видео.html
u menya ne poluchaetsa
--------------------------------------
[user@localhost project_chat]$ python client.py
Name: user
Traceback (most recent call last):
File "client.py", line 46, in
alias = input("Name: ")
File "", line 1, in
NameError: name 'user' is not defined
Не установлена библиотека, установите все библиотеки и попробуйте заново
У меня ничего не работает
File "client.py", line 47, in
s.sendto(("["+alias + "] => join chat ").encode("utf-8"),server)
OSError: [Errno 22] Invalid argument
Traceback (most recent call last):
File "/home/kosten/PycharmProjects/chat/server.py", line 10, in
s.bind((host, port))
OSError: [Errno 98] Address already in use
Прослушиваемый порт видимо уже заняла какая-то программа. Другой порт попробуй.
кто может помочь, напишите мне. Пожалуйста
Слушай,хоть это будет и звучать как хейт,но я всего лишь хочу качественные видосы,а не плагиат зарубежного автора. Что мы видим? Полная безграмотность в работе с библиотекой socket,непонимание ее основ,неумение объяснять суть видео,тобишь суть того как работает библиотека,почему dgram,а не sockstream например,примеры не приводятся,обучения ноль... зато мы умеем читать код вслух и объяснять основы синтаксиса в этом видео... в итоге,переписал код у другого автора,3 минуты ознакомился в доках с socket lib,прочитал код,спасибо,то,что надо было
неговоря уже о threading
2:50 может ghostemane?
Мне кажется, сюда можно прописать многопоточность, код будет гораздо быстрее и функциональнее работать
K Kol он как бы уже есть
зачем такому серваку многопоточность? как спойлер на девятке будет смотреться
Помогите ПЛиз
Лол? Нахрена мы в сервере все делали по-умному, чтобы если сервер будет перемещен и у него изменится IP, то он продолжал работать, если мы в клиенте все равно объявляем его константно? Чет блювота
Тоже об этом задумался, как-то неправильно что ли, вернее, как-то негибко.
Аргумент несостоятельный. А в вашем-то коде точно нет "блювоты"? А то докопаться до мелочи и "засрать" - много ума не надо.
@sTiKyt Само собой, но с этим слушатель разберется самостоятельно, видео в целом не об этом. Так что - да, считаю это придиркой к мелочи.
sTiKyt вы правы, но получается, что автор видео должен и про атомы рассказывать? Я не согласен. Упущение детали в данном случае от сути не отдаляет. И уж точно не даёт повод писать «блювота».
Как еще клиенту определить ип сервера? если клиент будет на другом компе
Что за дистрибутив?
Arch Linux
это antergos, если кому интересно
Много воды...