#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