Я пытаюсь отправить изображения (используя библиотеку IlpImage) в VLan (медиаплеер) через сеть, чтобы он мог воспроизводить потоковые изображения и «делать» видео.Не удается открыть сокет C++
Я пытаюсь открыть сокет, но значение «serversock» всегда дает мне -1, и я не понимаю, почему. Я пытаюсь найти эту ошибку, но не могу найти решение. Кто-нибудь может мне помочь?
Вот код:
#include <stdio.h>
#include <stdlib.h>
#include <direct.h>
#include <iostream>
#include <WinSock2.h>
#include <Windows.h>
#include <iostream>
#include <string.h>
#include <time.h>
#include <errno.h>
//#include <fstream>
//#include "Packet.h"
#include <opencv2/core/core.hpp> // Basic OpenCV structures (cv::Mat, Scalar)
#include <opencv2/highgui/highgui.hpp> // OpenCV window I/O
using namespace std;
#define PORT 8888
#define GROUP "127.0.0.1"
int serversock, clientsock;
int is_data_ready = 0;
//methods
void quit(char* msg, int retval);
void sendImg (IplImage *img);
void sendImg(IplImage *img) {
struct sockaddr_in server;
int opt = 1;
/* setup server's IP and port */
memset(&server,0,sizeof(server));
server.sin_family = AF_INET;
server.sin_addr.s_addr = inet_addr(GROUP);
server.sin_port = htons(PORT);
//serversock = socket(AF_INET, SOCK_STREAM, 0);
serversock = socket(AF_INET, SOCK_DGRAM, 0);
Хотя debbuging значение serversock
должно быть 0, и он получает -1, а не в соответствии с программой.
if (serversock < 0) { // or == -1
quit("socket() failed", 1);
} //else {cout<< "Consegui!" << endl
cout << "socket() succeeded" << endl;
if(setsockopt(serversock,SOL_SOCKET,SO_BROADCAST, (const char*) &opt,sizeof(int))==-1){
quit("setsockopt failed",0);
}
/*
memset(&server, 0, sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(PORT);
server.sin_addr.s_addr = INADDR_ANY;*/
/* bind the socket */
if (bind(serversock, (const sockaddr*)&server, sizeof(server)) == -1) {
quit("bind() failed", 1);
}
/* wait for connection */
if (listen(serversock, 10) == -1) {
quit("listen() failed.", 1);
}
/* accept a client */
if ((clientsock = (int)accept(serversock, NULL, NULL)) == -1) {
quit("accept() failed", 1);
}
/* the size of the data to be sent */
int imgsize = img->imageSize;
int bytes=0;
//start sending images
if (is_data_ready) {
is_data_ready = 0;
if((bytes = sendto(serversock, img->imageData, imgsize, 0, (struct sockaddr*)&server, sizeof(server))) == -1) {
quit("sendto FAILED", 1);
}
}
}
Благодаря hmjd, он работал на открытие сокета, но теперь у меня есть другая ошибка здесь: 'если (setsockopt (serversock, SOL_SOCKET, SO_BROADCAST (Const символ *) и выбрать, SizeOf (INT)) == - 1) { Сбой wprintf (L "с ошибкой:% ld \ n", WSAGetLastError()); WSACleanup(); quit ("setsockopt failed", 0); } '}' И приложение говорит мне: 'socket failed с ошибкой: 10042' Я собираюсь выполнить поиск этой ошибки. – xatz
Похоже на ошибку протокола WSAENOPROTOOPT. Я перешел из 'serversocket = socket (AF_INET, SOCK_STREAM, 0)' в 'serversocket = socket (AF_INET, SOCK_DGRAM, 0)' и он работал :) – xatz