c ++ QObject::connect 转换为新的 Qt5 语法

问题描述

我对 QT 还很陌生,所以请耐心等待。我有一个服务器应用程序,我必须连接到一个端口并获取一个数据包,该数据包基本上是一串 xml 内容。通信是古老的,并且可以很好地使用 https://www.binarytides.com/winsock-socket-programming-tutorial/ 中的示例返回数据,但是我正在尝试将此示例转换为新的 Qt5 连接语法并且失败了,非常感谢任何帮助或见解。以下是收到的服务数据包的响应示例。我需要将该 xml 抓取到内存中并对其进行操作。但是语法超出了我的范围。忘了提及我正在尝试使用命令行在 Windows 10 Visual Studio 2015 上运行并编译:cl /EHsc test.cpp

这似乎是需要改变的魔法: if (connect(s,(struct sockaddr *)&server,sizeof(server)) < 0)

D:\git>test

Initialising Winsock...Initialised.
Socket created.
Connected
Data Send

Reply received

<?xml version="1.0" standalone="yes"?>
<zoneserver>
<name>SuperNova</name>
<status>up</status>
<users>
<connected>0</connected>
<cap>3000</cap>
<max>0</max>
<total>0</total>
<deleted>0</deleted>
</users>
<uptime>142751</uptime>
<timestamp>1609481513051</timestamp>
</zoneserver>

这是我在 QT 中的代码

SOCKET s;
char *message,server_reply[2000];
int recv_size;

qDebug() << "\nInitialising Winsock...";

if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
{
    qDebug() << "Failed.";
    exit;
}

qDebug() << "Initialised.\n";

//Create a socket
if((s = socket(AF_INET,SOCK_STREAM,0 )) == INVALID_SOCKET)
{
    qDebug() << "Could not create socket : " << WSAGetLastError();
}

qDebug() << "Socket created.\n";


server.sin_addr.s_addr = inet_addr("192.168.0.116");
server.sin_family = AF_INET;
server.sin_port = htons( 44455 );

//Connect to Remote Server
//try to connect...


int status = connect(s,sizeof(server));

if(status < 0)
{
    qDebug() << "connect error";
    exit;
}

qDebug() << "Connected";

//Send some data
message = "GET / HTTP/1.1\r\n\r\n";
if( send(s,message,strlen(message),0) < 0)
{
    qDebug() << "Send Failed";
    exit;
}
qDebug() << "Data Send\n";

//Receive a reply from the server
if((recv_size = recv(s,server_reply,2000,0)) == SOCKET_ERROR)
{
    qDebug() << "recv Failed";
}

qDebug() << "Reply received\n";

//Add a NULL terminating character to make it a proper string before printing
server_reply[recv_size] = '\0';
qDebug() << server_reply;

但是在编辑器中我收到: .cpp:407: error: no matching member function for call to 'connect'

在无关包含之后:

#include <winsock2.h>
#else
#include <sys/socket.h>
#endif

#pragma comment(lib,"ws2_32.lib") //Winsock Library

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)