TCP服务端:
1创建套接字,绑定套接字到本地IP与端口
#socket.socket(socket.AF_INET,socket.SOCK_STREAM),s.bind()
2开始监听连接 #s.listen()
3进入循环,不断接受客户端的连接求 #s.accept()
4然后接收传来的数据,并发送给对方数据 #s.recv() , s.sendall()
5传输完毕后,关闭套接字 #s.close()
TCP客户端:
1创建套接字,连接远端地址
#socket.socket(socket.AF_INET,socket.SOCK_STREAM),s.connect()
2连接后发送数据和接收数据 # s.sendall(), s.recv()
3传输完毕后,关闭套接字 #s.close()
例程(树莓派端):
import time
import numpy as np
import cv2
import socket
class ComputerCamera(object):
def __init__(self):
HOST = '192.168.137.1'
PORT = 8000
self.server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.server.connect((HOST,PORT))
self.encode_param=[int(cv2.IMWRITE_JPEG_QUALITY),100]
def VideoTransmission(self, frame):
result, imgencode = cv2.imencode('.jpg', frame, self.encode_param)
imgencode = np.array(imgencode)
str_encode = imgencode.tostring()
self.server.send(str.encode(str(len(str_encode)).ljust(16)));
self.server.send(str_encode)
receive = self.server.recv(1024)
if len(receive):
print(receive.decode())
if __name__ == '__main__':
# try:
computer = ComputerCamera()
cam = cv2.VideoCapture(0)
ret,frame = cam.read()
while True:
computer.VideoTransmission(frame) # 向PC传输视频帧
cv2.imshow('frame',frame)
ret, frame = cam.read()
k = cv2.waitKey(1)
if k == ord("q"):
break
例程(电脑端):
import cv2
import numpy as np
import socket
HOST = '192.168.137.1'
PORT = 8000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(4)
conn, addr = s.accept()
def receiveall(sock, count):
buf = b''
while count:
newbuf = sock.recv(count)
if not newbuf: return None
buf += newbuf
count -= len(newbuf)
return buf
while conn:
length = receiveall(conn, 16)
stringData = receiveall(conn, int(length))
frame = np.frombuffer(stringData, dtype=np.uint8)
frame = cv2.imdecode(frame, cv2.IMREAD_COLOR)
# frame = cv2.resize(frame, (640,480))
cv2.imshow('camera_recevied', frame)
biaozhi = "1"
conn.send(biaozhi.encode())
k = cv2.waitKey(10) & 0xff
print("123")
if k == 27:
break
s.close()
cv2.destroyAllWindows()