ConnectionRefusedError: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение | PyQt и Socket

Рейтинг: 0Ответов: 1Опубликовано: 08.07.2023

Пишу программу на Python с графическим интерфейсом. Которая передает камеру компьютера на другой ПК (Camera Streaming). Не знаю проблема ли в этом или нет, но мне кажется что я не правильно сделал асинхронность с PyQT и Socket.

Код server.py:


from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
    QMetaObject, QObject, QPoint, QRect,
    QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
    QFont, QFontDatabase, QGradient, QIcon,
    QImage, QKeySequence, QLinearGradient, QPainter,
    QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QLabel, QMainWindow, QMenuBar,
    QSizePolicy, QStatusBar, QWidget)
from packages import *
from netsock import host
from wincom import write, read
from subprocess import Popen
from random import randint
from asyncio import get_event_loop, wait

from IPython.display import clear_output
import socket
import sys
import cv2
import matplotlib.pyplot as plt
import pickle
import numpy as np
import struct 
import zlib
from PIL import Image, ImageOps


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(385, 162)
        icon = QIcon()
        icon.addFile(u"favicon.png", QSize(), QIcon.Normal, QIcon.Off)
        MainWindow.setWindowIcon(icon)
        MainWindow.setStyleSheet(u"QMainWindow {\n"
"   background-color: black;\n"
"}\n"
"\n"
"QLabel {\n"
"   color: white;\n"
"   font-family: \"Fira Code\", monospace;\n"
"}\n"
"\n"
"QPushButton {\n"
"   color: white;\n"
"   background-color: #1E90FF;\n"
"   border-radius: 13px;\n"
"   font-size: 15px;\n"
"}\n"
"\n"
"QPushButton:hover {\n"
"   color: white;\n"
"   background-color: #1a7de0;\n"
"   border-radius: 13px;\n"
"   font-size: 15px;\n"
"}")
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.label = QLabel(self.centralwidget)
        self.label.setObjectName(u"label")
        self.label.setGeometry(QRect(90, 10, 221, 51))
        font = QFont()
        font.setFamilies([u"Fira Code"])
        font.setPointSize(20)
        self.label.setFont(font)
        self.label_2 = QLabel(self.centralwidget)
        self.label_2.setObjectName(u"label_2")
        self.label_2.setGeometry(QRect(120, 50, 161, 31))
        font1 = QFont()
        font1.setFamilies([u"Fira Code"])
        font1.setPointSize(10)
        font1.setBold(False)
        font1.setItalic(False)
        self.label_2.setFont(font1)
        self.label_3 = QLabel(self.centralwidget)
        self.label_3.setObjectName(u"label_3")
        self.label_3.setGeometry(QRect(100, 110, 201, 31))
        font2 = QFont()
        font2.setFamilies([u"Fira Code"])
        font2.setPointSize(12)
        font2.setBold(False)
        font2.setItalic(False)
        self.label_3.setFont(font2)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(MainWindow)
        self.menubar.setObjectName(u"menubar")
        self.menubar.setGeometry(QRect(0, 0, 385, 22))
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(MainWindow)
        self.statusbar.setObjectName(u"statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)

        QMetaObject.connectSlotsByName(MainWindow)
    # setupUi

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u" CameraShare - Waiting for clients", None))
        self.label.setText(QCoreApplication.translate("MainWindow", u"Room address:", None))
        self.label_2.setText(QCoreApplication.translate("MainWindow", u"192.168.0.106:5555", None))
        self.label_3.setText(QCoreApplication.translate("MainWindow", u"Waiting for user...", None))
    # retranslateUi

ip = read("address")
port = randint(1000, 9999)


async def window():

    app = QApplication([])
    ui = Ui_MainWindow()
    w = QMainWindow()
    ui.setupUi(w)
    w.show()

    ui.label_2.setText(f"{ip}:{port}")

    exit(app.exec())


async def network():

    HOST = ip
    PORT = port

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((HOST, PORT))
    s.listen(10)

    conn, addr = s.accept()
    data = b""

    data = b""
    payload_size = struct.calcsize(">L")

    while True:
        while len(data) < payload_size:

            data += conn.recv(4096)

            if not data:
                cv2.destroyAllWindows()
                conn,addr=s.accept()
                continue


        packed_msg_size = data[:payload_size]
        data = data[payload_size:]
        msg_size = struct.unpack(">L", packed_msg_size)[0]

        while len(data) < msg_size:
            data += conn.recv(4096)

        frame_data = data[:msg_size]
        data = data[msg_size:]

        frame=pickle.loads(frame_data, fix_imports=True, encoding="bytes")
        frame = cv2.imdecode(frame, cv2.IMREAD_COLOR)

        cv2.imshow('server',frame)
        cv2.waitKey(1)



loop = get_event_loop()

application = loop.create_task(window())
socket_network = loop.create_task(network())

loop.run_until_complete(wait([application, socket_network]))

Код client.py:

import cv2
import io
import socket
import struct
import time
import pickle
import numpy as np
import imutils


client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('192.168.0.105', 4387))

cam = cv2.VideoCapture(0)
img_counter = 0


encode_param=[int(cv2.IMWRITE_JPEG_QUALITY),90]

while True:
    ret, frame = cam.read()
    frame = imutils.resize(frame, width=320)
    frame = cv2.flip(frame,180)
    result, image = cv2.imencode('.jpg', frame, encode_param)
    data = pickle.dumps(image, 0)
    size = len(data)

    if img_counter%10==0:
        client_socket.sendall(struct.pack(">L", size) + data)
        
    img_counter += 1

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
    

cam.release()

И также полная ошибка:

Traceback (most recent call last):
  File "D:\CameraShare\client.py", line 12, in <module>
    client_socket.connect(('192.168.0.105', 4387))
ConnectionRefusedError: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение

Ответы

▲ 1

Скорее всего, в settings.py отсутствует строка:

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'