Сетевой сокет Python — [WinError 10053]

Я пытаюсь написать довольно простую программу «сетевой сокет» (сервер) и программу «подключение к сети» (клиент), основанную на курсе, который я беру. Я получаю [WinError 10053] при попытке подключиться с помощью программы «подключение к сети» с виртуальной машины Kali Linux в VMWare Workstation 15. Сетевой адаптер Kali VM работает в режиме NAT.

IPconfig хост-компьютера

виртуальная машина Kali ifconfig

Сервер

import socket

SRV_ADDR = input("Type the server IP address: ")
SRV_PORT = int(input("Type the server port: "))

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((SRV_ADDR, SRV_PORT))
s.listen(1)
print("Server started! Waiting for connections...")
connection, address = s.accept()
print('Client connected with address:', address)
while 1:
    data = connection.recv(1024)
    if not data: break
    connection.sendall(b'-- Message Received --\n')
    print(data.decode('utf-8'))
connection.close()

Клиент

import socket

SER_ADDR = input("Type the server IP address: ")
SER_PORT = int(input("Type the server port: "))

s2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s2.connect((SER_ADDR, SER_PORT))
print("Connection Established")

message = input("Message to send: ")
s2.sendall(message.encode())
s2.close()

Когда я запускаю программу «сетевой сокет» со своего локального компьютера, я могу успешно подключиться к виртуальной машине Kali с помощью Netcat и отправить данные.

Успешно — на стороне сервера

Успешно — на стороне клиента

Если я пытаюсь запустить программу «подключение к сети» из Kali, я успешно подключаюсь, но при отправке данных получаю WinError 10053 и ссылку на строку 13 в программе «подключение к сети».

Сбой — на стороне сервера

Ошибка на стороне клиента

Любая помощь будет оценена по достоинству. Извините, если не так написал, пишу на форум впервые :)


person ck50    schedule 11.06.2020    source источник


Ответы (1)


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

Если вы планируете отправлять только 1 сообщение, то вам следует убрать цикл из кода сервера.

В противном случае вы можете обернуть строку recv на сервере с помощью try/except, чтобы справиться с этой ситуацией.

person Meccano    schedule 12.06.2020