大家好!我正在尝试开发 AR 应用,使用C ++服务器和Unity作为客户端。我在C ++服务器和Unity之间使用 WinSock 进行了简单的连接,并发送简单的字符串。现在我尝试将opencv添加到服务器(想法是:它检测标记并将协调发送到Unity)。但是,当我添加opencv libriaries时,服务器停止正常工作(当我启动服务器时,它立即说客户端已连接,但客户端未启动)。所以我不知道该怎么做。这是一个代码:
#include "stdafx.h"
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#pragma comment(lib,"ws2_32.lib")
#include <WinSock2.h>
#include <iostream>
#include <string>
#include "opencv2\core.hpp"
#include "opencv2\imgcodecs.hpp"
#include "opencv2\imgproc.hpp"
#include "opencv2\highgui.hpp"
#include "opencv2\aruco.hpp"
#include "opencv2\calib3d.hpp"
#include <sstream>
#include <iostream>
#include <fstream>
using namespace std;
using namespace cv;
int main() {
WSAData wsaData;
WORD DllVersion = MAKEWORD(2, 1);
if (WSAStartup(DllVersion, &wsaData) != 0) {
MessageBoxA(NULL, "WinSock sturtup failed", "Error", MB_OK | MB_ICONERROR);
exit(1);
}
SOCKADDR_IN addr; // socket adresy
int addrlen = sizeof(addr);
addr.sin_addr.s_addr = inet_addr("100.100.0.1"); //
addr.sin_port = htons(10101);
addr.sin_family = AF_INET; //ipv4
SOCKET sListen = socket(AF_INET, SOCK_STREAM, NULL);
bind(sListen, (SOCKADDR*)&addr, sizeof(addr));
listen(sListen, SOMAXCONN);
SOCKET newConnection;
newConnection = accept(sListen, (SOCKADDR*)&addr, &addrlen);
if (newConnection == 0) {
cout << "Failed to accept the client's connection" << endl;
}
else {
cout << "Client connected!" << endl;
char MOTD[256];
string sendData;
cin >> sendData;
int i;
for (i = 0; i < sendData.length(); i++)
{
MOTD[i] = sendData.at(i);
}
send(newConnection, MOTD, i, NULL);
}
system("pause");
return 0;
}
请注意代码运行良好(没有添加opencv库时)。