【问题标题】:Opencv does not work with socket connectionOpencv 不适用于套接字连接
【发布时间】:2019-12-23 20:39:20
【问题描述】:

我制作的程序需要帮助。

这是一个简单的客户端服务器连接程序,工作得非常好,但只要我添加#include 任何与 openCV 相关的内容,连接就会立即失败,就好像它甚至没有尝试过一样。

我在网上找到的唯一相关内容是这篇文章: Socket doesn't work, when opencv libriary is added

这是代码,只要注释掉 opencv #include 就可以正常工作,但是如果添加它们,它总是无法连接。

#define _WINSOCK_DEPRECATED_NO_WARNINGS

#include <iostream>
#include <winsock2.h>
#include <string>

//#include <opencv2/opencv.hpp>
//#include <opencv2/objdetect.hpp>
//#include <opencv2/imgcodecs.hpp>
//#include <opencv2/highgui/highgui.hpp>
//#include <opencv2/imgproc/imgproc.hpp>

using namespace std;
//using namespace cv;

#pragma comment(lib, "Ws2_32.lib")

int main()
{
    WSADATA WSAData;
    SOCKET server, client;
    SOCKADDR_IN serverAddr, clientAddr;

    WSAStartup(MAKEWORD(2, 0), &WSAData);
    server = socket(AF_INET, SOCK_STREAM, 0);

    serverAddr.sin_addr.s_addr = inet_addr("addresshere");
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_port = htons(porthere);

    bind(server, (SOCKADDR*)&serverAddr, sizeof(serverAddr));
    listen(server, 0);

    cout << "Listening for incoming connections..." << endl;

    int clientAddrSize = sizeof(clientAddr);
    client = accept(server, (SOCKADDR*)&clientAddr, &clientAddrSize);

    cout << client << "\n";
}

【问题讨论】:

  • 摆脱using namespace std。可能会导致使用不正确的符号(我的猜测是bind)。
  • 可能与宏有关。定义的宏可能会相互干扰。每当我包含windows.h 时,我必须#undef max 或程序停止编译。您可以尝试将标头隔离到不同的 .cpp 中,这样它们就不会相互干扰。
  • 非常感谢!我删除了 using namespace std,它现在可以工作了!非常感谢。
  • 它是怎么失败的?

标签: c++ sockets opencv server


【解决方案1】:

来自 cmets 的回答:使用命名空间 std 删除, 只是在 cout 行上添加了 std:: ,现在它可以工作了。

似乎它导致了 opencv 的一些问题,但是当它消失时它可以工作。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-02
  • 1970-01-01
  • 2020-08-26
  • 1970-01-01
  • 2017-10-15
  • 2018-02-20
  • 1970-01-01
相关资源
最近更新 更多