55 lines
1.5 KiB
C++
55 lines
1.5 KiB
C++
#include <opencv2/highgui.hpp>
|
|
#include <opencv2/core/mat.hpp>
|
|
#include <cstring>
|
|
#include <iostream>
|
|
#include <netinet/in.h>
|
|
#include <sys/socket.h>
|
|
#include <unistd.h>
|
|
#include "transfer.h"
|
|
|
|
using namespace std;
|
|
|
|
int main() {
|
|
// TODO: read image data from socket instead of VideoCapture
|
|
// creating socket
|
|
int serverSocket = socket(AF_INET, SOCK_STREAM, 0);
|
|
|
|
// specifying the address
|
|
sockaddr_in serverAddress;
|
|
serverAddress.sin_family = AF_INET;
|
|
serverAddress.sin_port = htons(8080);
|
|
serverAddress.sin_addr.s_addr = INADDR_ANY;
|
|
|
|
// binding socket.
|
|
bind(serverSocket, reinterpret_cast<sockaddr *>(&serverAddress),
|
|
sizeof(serverAddress));
|
|
|
|
info("Ready to accept connections.");
|
|
// listening to the assigned socket
|
|
listen(serverSocket, 5);
|
|
|
|
// accepting connection request
|
|
int clientSocket = accept(serverSocket, nullptr, nullptr);
|
|
info("Client connected.");
|
|
|
|
// TODO: handle multiple images
|
|
cv::Mat image = cv::Mat::zeros(cv::Size(640, 480), CV_8UC3);
|
|
|
|
bool running = true;
|
|
// TODO: make this asynchronous. probably do that in tandem with setting up networking
|
|
while (running) {
|
|
// receive data
|
|
vector<uchar> buffer;
|
|
trace("Receiving image");
|
|
recvImage(clientSocket, buffer);
|
|
|
|
trace("Applying new data to image");
|
|
applyImage(image, &buffer);
|
|
|
|
trace("Displaying image");
|
|
imshow("image", image);
|
|
running = cv::waitKey(30) != 27;
|
|
}
|
|
close(serverSocket);
|
|
return 0;
|
|
} |