具有多线程的Python Server:退出时WinError 10038关闭套接字

问题描述

我正在尝试创建一个服务器来处理与多个客户端的通信。 此应用通过cv2库运行人脸检测,如果检测到人脸,它将以字节数组的形式将图像发送给所有活动(连接)的客户端。 我在这里有两个infitite(而True)循环-一个用于在主“线程”上进行人脸检测,另一个用于在线程库中的Thread上运行,我的服务器套接字正在接受所有新客户端。 按按钮退出应用程序时出现问题,出现以下错误:

[ WARN:0] global C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-cff9bdsm\opencv\modules\videoio\src\cap_msmf.cpp (435) `anonymous-namespace'::SourceReaderCB::~SourceReaderCB terminating async callback

Successfully closed server application
Exception in thread Thread-1:

Traceback (most recent call last):
  File "C:\Users\Slavujevic\AppData\Local\Programs\Python\Python38-32\lib\threading.py",line 932,in _bootstrap_inner
    self.run()
  File "C:\Users\Slavujevic\AppData\Local\Programs\Python\Python38-32\lib\threading.py",line 870,in run
    self._target(*self._args,**self._kwargs)
  File ".\Server.py",line 51,in clientReceivement
    client,address = serversock.accept()
  File "C:\Users\Slavujevic\AppData\Local\Programs\Python\Python38-32\lib\socket.py",line 292,in accept
    fd,addr = self._accept()
OSError: [WinError 10038] An operation was attempted on something that is not a socket

这是我的代码:

#face detection dependencies
import cv2
import numpy as np

#TCP/IP socket communication dependencies
import socket
from threading import Thread
import threading
import time

#face detection classifier
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
#WebCam handler
cap = cv2.VideoCapture(0)

#socket server's IP address & port 
port = 21000
host = socket.gethostname() # Get local machine name

#socket initialisation
clients = set()
clients_lock = threading.Lock()

global serversock
serversock = socket.socket()
serversock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
serversock.bind(('',port))
serversock.listen(3)
th = []

def listener(client,address):
    global img
    print ("\nAccepted connection from: ",address,'\n')
    with clients_lock:
        clients.add(client)
    try:    
        while True:
            data = client.recv(1024)
            if int(data) == 0:
                msg = "HI :)"
                print('\nSENDING: ',str(msg),'\n')
                #char = str(int(catch))
                client.send(bytes(msg,encoding='utf8'))
    except ValueError:
        print("\nClient Disconnected\n")

def clientReceivement():

    print ("\nWaiting for new clients...\n")
    while True:
        client,address = serversock.accept()
        th.append(Thread(target=listener,args = (client,address)).start())


th.append(Thread(target=clientReceivement).start())
while True:
    global img
    ret,img = cap.read()
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray,1.3,5)
    for(x,y,w,h) in faces:
        cv2.rectangle(img,(x,y),(x+w,y+h),(0,255),2)
        roi_gray = gray[y:y+h,x:x+w]
        roi_color = img[y:y+h,x:x+w]

    cv2.imshow('img',img)
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break

cap.release()
cv2.destroyAllWindows()
serversock.close()

print("\nSuccessfully closed server application\n")
exit() 

谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...