Я пытаюсь отправить с python на python нормально, но если я отправляю на другом языке, проблема с распаковкой, я сделаю python для получения и c ++ для отправителя, пожалуйста, помогите мне с простым кодом . если я использую С ++ и С ++, это нормально, я знаю, что это другой метод, но я не знаю, как решить эту
получить:
import socket
import sys
import cv2
import numpy as np
import struct
HOST = '127.0.0.1'
PORT = 8083
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print('Socket created')
s.bind((HOST, PORT))
print('Socket bind complete')
s.listen(10)
print('Socket now listening')
conn, addr = s.accept()
while True:
data = conn.recv(4096)
........
cv2.imshow('frame', frame)
cv2.waitKey(10)
отправитель:
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <string>
#include <vector>
#include <opencv2/opencv.hpp>
#include <stdio.h>
using namespace std;
using namespace cv;
int main()
{
int sock;
struct sockaddr_in addr;
sock = socket(AF_INET, SOCK_STREAM, 0);
if(sock < 0){
perror("socket");
exit(1);
}
addr.sin_family = AF_INET;
addr.sin_port = htons(8083);
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
if(connect(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0){
perror("connect");
exit(2);
}
int bbytee;
cout << "before open the cam" << endl;
VideoCapture cap(0);
if(!cap.isOpened()) {
cout<< "Could not open the camera" << endl;
close(sock);
return -1;
}
Mat frame;
frame = Mat::zeros(480, 640, CV_8UC3);
int imgSize = frame.cols*frame.rows*3;
int cnt=0;
//Mat frame;
while(1) {
cap >> frame;
if(frame.empty()) {
cerr<<"[client] VideoCapture(0) error!"<<endl;
}
cout<< ++cnt << ":"<< frame.isContinuous()<<"," <<frame.size()<<endl;;
if( (bbytee = send(sock, frame.data, imgSize, 0)) < 0 ) {
cerr<< "bytes = " << bbytee << endl;
break;
}
// cv::imshow("client", frame);
// if(cv::waitKey(100) == 'q') {
// break;
// }
}
close(sock);
return 0;
}