Python UDP chat (Примитивный)

hellhyde

Новичок
Пользователь
Июл 28, 2020
28
4
3
Доброго всем времени суток. Помогите разрулить проблему. Написал примитивный чат на udp протоколе. Но он не много некорретно работает, а так как я только учусь, не могу найти причину.
Вообщем, когда пишет сервер клиенту, у клиента все норм отображается, а когда клиент серверу, то на сервере кодировка страдает 'b/dw/bx' и т.д. А нужно нормально что бы было.
И что бы когда ктото из них пишет exit. У всех был дисконект, а так у меня только на 1 сторону

Сервер
Python:
# server
import socket
import sys
host = 'localhost'
port = 2323
addr = (host, port)
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(addr)

while True:
    print('Ожидаю подключения')
    d = server.recvfrom(1024)
    received = d[0]
    addr = d[1]
    print('Клиент: ', received)
    print('Сервер: ', addr)
    msg = input('Введи сообщение: ')
    server.sendto(msg.encode('utf-8'), addr)
    if msg == 'exit':
        sys.exit()


Клиент
Python:
#Client
import socket
import sys

host = 'localhost'
port = 2323
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:
    msg = input('Введи сообщение: ')
    if msg == 'exit':
        sys.exit()
    client.sendto(msg.encode(), (host, port))
    d = client.recvfrom(1024)
    reply = d[0]
    addr = d[1]
    print('Сервер: ' + reply.decode())
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Если вы сами написали этот чат - то легко бы решили вопрос с кодировкой и выключением.
Вот пример:
Python:
# server
import socket


host = 'localhost'
port = 2323
addr = (host, port)
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(addr)

while True:
    print('Ожидаю подключения')
    d = server.recvfrom(1024)
    received = d[0].decode('utf-8')
    addr = d[1]
    print('Клиент: ', received)
    print('Сервер: ', addr)
    if received == 'exit':
        break
    msg = input('Введи сообщение: ')
    server.sendto(msg.encode('utf-8'), addr)
    if msg == 'exit':
        break
Python:
#Client
import socket


host = 'localhost'
port = 2323
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:
    msg = input('Введи сообщение: ')
    client.sendto(msg.encode('utf-8'), (host, port))
    if msg == 'exit':
        break
    d = client.recvfrom(1024)
    reply = d[0].decode()
    addr = d[1]
    print('Сервер: ' + reply)
    if reply == 'exit':
        break
 

Форум IT Специалистов