Могу ли я создать клиентский сокет только для установления соединения с использованием python 3.6

#python #python-3.x

#python #python-3.x

Вопрос:

Я читаю о модуле сокета на сайте веб-обучения о python, они дали нам простые шаги по использованию модуля сокета следующим образом:

 import socket

with socket.socket() as client_socket:

    hostname = '127.0.0.1'
    port = 9090

    address = (hostname, port)
    client_socket.connect(address)

    data = 'Wake up, Neo'
    data = data.encode()

    client_socket.send(data)
    response = client_socket.recv(1024)

    response = response.decode()
    print(response)
  

при выполнении я получил сообщение об ошибке:
ConnectionRefusedError: [WinError 10061] Не удалось установить соединение, поскольку целевая машина активно отказалась от него.

когда я искал об этом, на некоторых сайтах говорилось о прослушивании сервера, и я вижу в большинстве руководств о серверном сокете, и они используют его вместе с клиентским.

итак, связано ли сообщение об ошибке с тем фактом, что я не использую серверный сокет, и обязательно ли использовать их оба

Обновить:

после прочтения полученных ответов я перешел к test.py файл, который преподаватели курса используют для оценки наших кодов, и я вижу, что они создают в нем сокет сервера, так что сервер уже создан ими. это возвращает меня к ошибке, которую я получил, почему это происходит тогда.

 def server(self):
        '''function - creating a server and answering clients'''
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.sock.bind(('localhost', 9090))
        self.ready = True
        try:
            self.sock.listen(1)
            conn, addr = self.sock.accept()
            self.connected = True
            conn.settimeout(15)
            while True:
                data = conn.recv(1024)
                self.message.append(data.decode('utf8'))
                if len(self.message) > 1_000_000:
                    conn.send(
                        json.dumps({
                            'result': 'Too many attempts to connect!'
                        }).encode('utf8'))
                    break
                if not data:
                    break
  

Комментарии:

1. ДА, вы можете это сделать

2. Это клиентская часть соединения. для установления соединения вам также нужен сервер. Сервер должен прослушивать адрес: localhost:9090

Ответ №1:

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

В коде, который вы нам показали, у вас есть строки

 hostname = '127.0.0.1'
port = 9090

address = (hostname, port)
client_socket.connect(address)
  

Это строки, которые определяют, к какому серверу вы подключаетесь. В данном случае это сервер 127.0.0.1 (который является локальным хостом, на том же компьютере, на котором вы запускаете код), прослушивающий порт 9090 .

Если вы хотите создать свой собственный сервер, вы можете посмотреть документацию по сокетам Python, и конкретные функции, о которых вы хотите знать, — это bind , listen , и accept . Вы можете найти примеры внизу той же страницы.

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

Комментарии:

1. Спасибо за ваш ответ, к сожалению, это единственный код, который они дали для создания сокета, я проверил ближайшие уроки и ни слова о носке сервера. и из приведенных вами примеров я вижу, что мне нужно создать 2 файла и запустить их оба, чтобы установить сокет. @Kemp