OSError:[WinError 10049]我该如何处理这个错误?

问题描述:

我正在尝试使用python将来自Raspberry Pi的视频流传输到我的机器。因此,我需要将套接字连接到服务器。 (流视频直接在192.168.0.6:8081从RPI执行这些之前)OSError:[WinError 10049]我该如何处理这个错误?

在我的电脑上我执行此代码:

import numpy as np 
import cv2 
import socket 


class VideoStreamingTest(object): 

    def __init__(self): 
     self.server_socket = socket.socket() 
     self.server_socket.bind(('192.168.0.6', 8081)) 
     self.server_socket.listen(0) 
     self.connection, self.client_address = self.server_socket.accept() 
     self.connection = self.connection.makefile('rb') 
     self.streaming() 

def streaming(self): 
    try: 
     print ("Connection from: ", self.client_address) 
     print ("Streaming...") 
     print ("Press 'q' to exit") 

     stream_bytes = ' ' 
     while True: 
      stream_bytes += self.connection.read(1024) 
      first = stream_bytes.find('\xff\xd8') 
      last = stream_bytes.find('\xff\xd9') 
      if first != -1 and last != -1: 
       jpg = stream_bytes[first:last + 2] 
       stream_bytes = stream_bytes[last + 2:] 
       #image = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), cv2.CV_LOAD_IMAGE_GRAYSCALE) 
       image = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), cv2.CV_LOAD_IMAGE_UNCHANGED) 
       cv2.imshow('image', image) 

       if cv2.waitKey(1) & 0xFF == ord('q'): 
        break 
    finally: 
     self.connection.close() 
     self.server_socket.close() 

if __name__ == '__main__': 
    VideoStreamingTest() 

在编译期间它提出了这样的错误:

Traceback (most recent call last): 

File "C:/Users/tiger/Desktop/take_the_stream_from_pi.py", line 43, in <module> 
    VideoStreamingTest() 

File "C:/Users/tiger/Desktop/take_the_stream_from_pi.py", line 11, in __init__ 
    self.server_socket.bind(('192.168.0.6', 8081)) 

OSError: [WinError 10049] The requested address is not valid in its context 

编辑:这也给

Traceback (most recent call last): 
    File "C:/Users/tiger/Desktop/take_the_stream_from_pi.py", line 47, in 
<module> 
    VideoStreamingTest() 
    File "C:/Users/tiger/Desktop/take_the_stream_from_pi.py", line 17, in 
__init__ 
self.connection = self.socket.create_connection(('192.168.0.6', 8081)) 
AttributeError: 'socket' object has no attribute 'create_connection' 

所以我试图重新将create_connection与connect_ex,它仍然是给误差修改.. :(

class VideoStreamingTest(object): 
    def __init__(self): 

    #self.server_socket = socket.socket() 
    #self.server_socket.bind(('192.168.0.6', 8081)) 
    #self.server_socket.listen(0) 

    #self.connection, self.client_address = self.server_socket.accept() 
    #self.connection = self.connection.makefile('rb') 
    #self.streaming() 
    self.socket = socket.socket() 
    self.connection = self.socket.create_connection(('192.168.0.6', 8081)) 
    #self.socket.connect(('192.168.0.6', 8081)) 
    self.streaming() 

def streaming(self): 

    try: 
     #print ("Connection from: ", self.client_address) 
     print ("Streaming...") 
     print ("Press 'q' to exit") 

     stream_bytes = ' ' 
     while True: 
      stream_bytes += self.connection.read(1024) 
      first = stream_bytes.find('\xff\xd8') 
      last = stream_bytes.find('\xff\xd9') 
      if first != -1 and last != -1: 
       jpg = stream_bytes[first:last + 2] 
       stream_bytes = stream_bytes[last + 2:] 
       #image = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), cv2.CV_LOAD_IMAGE_GRAYSCALE) 
       image = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), cv2.CV_LOAD_IMAGE_UNCHANGED) 
       cv2.imshow('image', image) 

       if cv2.waitKey(1) & 0xFF == ord('q'): 
        break 
    finally: 
     self.connection.close() 
     self.socket.close() 

if __name__ == '__main__': 
    VideoStreamingTest() 
+1

'192.168.0.6'是远程的IP地址,是否正确? 'socket.bind()'需要分配给本地主机的地址。 – birryree

+0

ya其覆盆子pi的IP地址 –

你必须改变在插槽中,设备的IP地址的bind指令的IP地址,其提供的服务器,即地址你自己的电脑。您在此发布的代码不会执行您想要执行的操作:它将创建一个新的server,并且不会充当可以连接到服务器的客户端!

此行

self.server_socket.bind(('192.168.0.6', 8081)) 
self.server_socket.listen(0) 

必须与

self.socket.connect(('192.168.0.6', 8081)) 

编辑被替换:也许是最好使用create_connection功能,因为它提出了更高的API级别运行。所以,你最终会与此初始化方法:

def __init__(self): 
    self.socket = socket.socket() 
    self.connection, _ = self.socket.create_connection(('192.168.0.6', 8081)) 
    self.streaming() 

streaming方法,那么你必须删除此行,也:

print ("Connection from: ", self.client_address) 
+0

我会马上尝试,如果它有效,我会告诉你!非常感谢! –

+0

@MohdSalman如果它对你有帮助,请将我的回应投给我,并将其标记为你问题的答案。 – FlashTek

+0

错误: 回溯(最近通话最后一个): 文件 “C:/Users/tiger/Desktop/take_the_stream_from_pi.py”,第44行,在 VideoStreamingTest()文件“C:/用户/虎/桌面(''192.168.0.6',8081)) AttributeError:'VideoStreamingTest'对象没有属性'socket' –