提问人:Emir Ünalan 提问时间:11/12/2023 更新时间:11/12/2023 访问量:32
Python 套接字地址已在使用错误
Python Sockets Address already in use error
问:
我将从 RPi 获取网络摄像头帧,并将其发送到我的 PC。然后,我将随机数从 PC 发送到 RPi。我需要用相同的代码来完成(我将对图像进行一些更改,并在我连接到RPI的屏幕上打印信息。但是当我尝试运行代码时,程序返回以下错误:
Traceback (most recent call last):
File "/home/flood/Desktop/server.py", line 32, in <module>
server_socket.bind(('0.0.0.0', 8000))
OSError: [Errno 98] Address already in use
Server.py :
import io
import cv2
import socket
import struct
import time
import numpy as np
from PIL import Image
ip = str(input('Enter IP address: '))
camera = cv2.VideoCapture(0)
while True:
cl_socket = socket.socket()
cl_socket.connect((ip, 8000))
cl_connection = cl_socket.makefile('wb')
stream = io.BytesIO()
ret, frame = camera.read()
frame = cv2.resize(frame, (640, 480))
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
frame = Image.fromarray(frame)
frame.save(stream, format="JPEG")
stream.seek(0)
image_bytes = stream.read()
cl_connection.write(struct.pack('<L', len(image_bytes)))
cl_connection.flush()
stream.seek(0)
cl_connection.write(stream.read())
stream.seek(0)
stream.truncate()
cl_connection.close()
cl_socket.close()
server_socket = socket.socket()
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind(('0.0.0.0', 8001))
server_socket.listen(0)
server_connection = server_socket.accept()[0].makefile('rwb')
while True:
message = server_connection.readline()
if message:
print(message)
break
Client.py :
import cv2
import io
import socket
import struct
from PIL import Image
import numpy as np
import random
while True:
server_socket = socket.socket()
server_socket.bind(('0.0.0.0', 8001))
server_socket.listen(0)
server_connection = server_socket.accept()[0].makefile('rb')
image_len = struct.unpack('<L', server_connection.read(struct.calcsize('<L')))[0]
if not image_len:
break
image_stream = io.BytesIO()
image_stream.write(server_connection.read(image_len))
image_stream.seek(0)
image = Image.open(image_stream).convert('RGB')
image = np.array(image)
cv2.imshow('Image', cv2.cvtColor(image, cv2.COLOR_RGB2BGR))
cv2.waitKey(1)
server_connection.close()
server_socket.close()
new_socket = socket.socket()
new_socket.connect(('192.168.1.109', 8000))
new_connection = new_socket.makefile('rwb')
r = random.randint(0, 100)
new_connection.write(str(r).encode())
new_connection.flush()
new_connection.close()
new_socket.close()
答: 暂无答案
评论