@Onigire

Почему программа вылетает?

Здравствуйте, пытался разобраться как работает сокет в пайтоне, написал какое-то подобие чата и скомпилировал. На моем компьютере все работает. Но у других прога вылетает в функции client. К слову антивирус был отключен у всех. Подскажите, пожалуйста, что может быть не так.
Вот код.
import socket
import threading


class Connection:
    def __init__(self):
        self.is_connected = False
        self.name = input("Введите ваше имя: ")
        self.ip = socket.gethostbyname(socket.gethostname())

    def host(self, host, port):
        server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        server.bind((host, port))
        server.listen(1)
        client, addr = server.accept()
        threading.Thread(target=self.handle_connection, args=(client,)).start()
        server.close()

    def client(self, host, port):
        client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        client.connect((host, port))
        threading.Thread(target=self.handle_connection, args=(client,)).start()

    def handle_connection(self, client):
        print("Соединение установлено\n")
        self.is_connected = True
        input_thread = threading.Thread(target=self.input_thread, args=(client,))
        input_thread.start()
        while self.is_connected:
            data = client.recv(1024)
            if data:
                print(data.decode('utf-8'))
        client.close()
        self.is_connected = False

    def input_thread(self, client):
        while self.is_connected:
            info = f"{self.name}: {input()}"
            client.send(info.encode('utf-8'))


connection = Connection()
connection_type = input("Введите: 1 = cоздать чат / 2 = подключится\n")

if connection_type == "1":
    print(f"Ваш ip: {connection.ip}\nОжидание соединения...")
    connection.host(connection.ip, 9999)

elif connection_type == "2":
    connection.client(input("Введите ip собеседника: ").strip(), 9999)
  • Вопрос задан
  • 71 просмотр
Решения вопроса 1
@dima20155
you don't choose c++. It chooses you
Если сервер и клиент не находятся в одной сети, то клиент не сможет подключиться к хосту и упадет по тайм-ауту.

Выход - запускать хост на выделенном сервере с открытым нужным портом и белым ip

Создать общую локальную сеть (физически или через программы типо хамачи)

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

Войдите, чтобы написать ответ

Похожие вопросы