ConnectionRefusedError: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение | PyQt и Socket
Пишу программу на 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] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение
Источник: Stack Overflow на русском