pro文件注意添加
LIBS += -lws2_32
#ifndef SOCKETCLIENT_H
#define SOCKETCLIENT_H
#include <QObject>
#include <winsock2.h>
#include <queue>
using namespace std;
class socketClient : public QObject
{
Q_OBJECT
public:
explicit socketClient(QObject *parent = nullptr);
signals:
public slots:
void run();
private:
SOCKET m_client;
SOCKET m_server;
queue<string> m_recv;
};
#endif
#include "socketclient.h"
#include <QDebug>
socketClient::socketClient(QObject *parent) : QObject(parent)
{
WORD socketVersion = MAKEWORD(2,2);
WSADATA wasData;
if(WSAStartup(socketVersion,&wasData) != 0)
{
qDebug() << "socket init error...";
}
m_client = socket(AF_INET,SOCK_STREAM,0);
if(m_client == INVALID_SOCKET)
{
qDebug() << "socket init error...";
}
sockaddr_in addr;
addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addr.sin_family = AF_INET;
addr.sin_port = htons(8080);
if(::connect(m_client,(sockaddr*)&addr,sizeof (addr)) < 0)
{
closesocket(m_client);
}
}
void socketClient::run()
{
while(1)
{
char buff[1024] = {0};
int recvSize = recv(m_client,buff,1024,0);
if(recvSize > 0)
{
m_recv.push(buff);
}
if(m_recv.size() > 0)
{
string sendbuff = m_recv.front();
m_recv.pop();
send(m_client,sendbuff.c_str(),sendbuff.length(),0);
}
}
}