【发布时间】: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,它现在可以工作了!非常感谢。
-
它是怎么失败的?