• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Проблема с чатом на питоне

Borjomy

Member
30.12.2020
16
0
BIT
0
Привет.Чат работает только на одном компе.На другом компе сервер не работает.
Вот код :
Python:
import socket
import threading

#Клиент
SERVER_ADDRESS = ('localhost', 8125)
sor = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sor.bind(('', 0))
sor.sendto(('Connect to server').encode('utf-8'), SERVER_ADDRESS)



def reading_socket():
    while True:
        data = sor.recv(1024)
        print(data.decode('utf-8'))


potok = threading.Thread(target=reading_socket)
potok.start()
Python:
import socket
import os
SERVER_ADDRESS = ('localhost', 8125)
#сервер
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_socket.bind(SERVER_ADDRESS)
clients = []
members = {}
print("Server is running")

#ТУТ БОЛЬШАЯ ФУНКЦИЯ "РЕГИСТРАЦИИ"
#С ВВОДОМ ИМЕНИ, ПОДТВЕРЖДЕНИЕМ, ПАРОЛЕМ
def register_on_chat(port_address):
    register_data = 'Необходимо пройти регистрацию, введите свой ник: '
    server_socket.sendto(register_data.encode('utf-8'), address)

    def confirm_nickname(port_address):
        name, address = server_socket.recvfrom(1024)
        registration_data = f"Ваш ник {name.decode('utf-8')}? Введите Уes=1 или No=2."
        server_socket.sendto(registration_data.encode('utf-8'), address)
        append_to_list(name, port_address)

        

    def new_nickmane(address):
        registration_data = 'Введите свой ник: '
        server_socket.sendto(registration_data.encode('utf-8'), address)
        confirm_nickname(address)

    def append_to_list(name, port_address):
        data, address = server_socket.recvfrom(1024)
        if data.decode('utf-8') == '1':
            get_pass(name)
        elif data.decode('utf-8') == '2':
            new_nickmane(port_address)

    def get_pass(name):
        pass_data_1 = f"Привет {name.decode('utf-8')} Введите пароль для своего ника: "
        server_socket.sendto(pass_data_1.encode('utf-8'), address)
        password_1, adr= server_socket.recvfrom(1024)
        pass_data_2 = "Повтори пароль"
        server_socket.sendto(pass_data_2.encode('utf-8'), address)
        password_2, adr = server_socket.recvfrom(1024)

        if password_1 == password_2:
            members[name.decode('utf-8')] = password_1.decode('utf-8')
            pass_data_3 = "Регистрация прошла успешно"
            server_socket.sendto(pass_data_3.encode('utf-8'), address)
            print(members)
        else:
            pass_data_4 = "Не правильно( попробуй сного"
            server_socket.sendto(pass_data_4.encode('utf-8'), address)
            get_pass(name)

    confirm_nickname(port_address)


while True:
    data, address = server_socket.recvfrom(1024)
    print(address[0], address[1])
    if address not in clients:
        clients.append(address)
        register_on_chat(address)
        text = "Регистрация прошла успешно. Добро пожаловать в чат!"
        server_socket.sendto(text.encode('utf-8'), address)

    for client in clients:

        if client == address:
            text_from_client = data.decode('utf-8')
            print(text_from_client)

            continue

        server_socket.sendto(data, client)

Ну вот так как-то.Помогите пожалуйста,я сам новичок в програмировании по этому просто скажите какую часть кода вставить или заменить.Расчитываю на вашу помощь.
 

INPC

Grey Team
21.08.2019
77
162
BIT
292
В код не вдавался, но если ты имеешь в виду, что не можешь подключиться к серверу с других ус-в в той же локальной сети, то скорее всего это из-за ip адреса, т.к. ты запускаешь сервер на localhost,
SERVER_ADDRESS = ('localhost', 8125)

пропиши вместо localhost локальный ip устройства на котором запускаешь сервер, например
SERVER_ADDRESS = ('192.168.0.15', 8125)

P.S. так же надо это сделать в клиенте, а узнать свой ip можно командой ifconfig, или ipconfig.

Попробуй, может даже в код вникать не придется, чтоб помочь
 

Borjomy

Member
30.12.2020
16
0
BIT
0
В код не вдавался, но если ты имеешь в виду, что не можешь подключиться к серверу с других ус-в в той же локальной сети, то скорее всего это из-за ip адреса, т.к. ты запускаешь сервер на localhost,


пропиши вместо localhost локальный ip устройства на котором запускаешь сервер, например


P.S. так же надо это сделать в клиенте, а узнать свой ip можно командой ifconfig, или ipconfig.

Попробуй, может даже в код вникать не придется, чтоб помочь
Ещё один вопрос,получается если закрыть сервер, то как-бы он закроется и нагрузка на сеть пропадёт?Да кстати спасибо помогло, всё отлично работает!)
 

INPC

Grey Team
21.08.2019
77
162
BIT
292
Ещё один вопрос,получается если закрыть сервер, то как-бы он закроется и нагрузка на сеть пропадёт?Да кстати спасибо помогло, всё отлично работает!)
Представь обычный ПК, ты его выключаешь, но диод на материнской плате все равно горит, к сети он подключен... с распбери тоже самое. Не проверял изменение нагрузки на сеть при выключении, или работе малины, но думаю это легко гуглится, или проверяется опытным путем)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!