服务器端
void Widget::initserver()
{
server = new QTcpServer;
server->listen(QHostAddress::AnyIPv4,10010);
connect(server,SIGNAL(newConnection()),this,SLOT(newConnectslot()));
}
void Widget::newConnectslot()
{
// 分配套接字
QTcpSocket *socket = server->nextPendingConnection();
connect(socket,SIGNAL(readyRead()),this,SLOT(readyReadslot()));
connect(socket,SIGNAL(disconnected()),this,SLOT(disconnectslot()));
}
void Widget::readyReadslot()
{
QTcpSocket *socket = (QTcpSocket *)sender();
QByteArray data;
if(socket->bytesAvailable())
{
data.append(socket->readAll());
}
translate(socket,data);
}
void Widget::disconnectslot()
{
QTcpSocket *socket = (QTcpSocket*)sender();
socket->close();
socket->deleteLater();
}
客户端
#include "network.h"
Network *Network::getNet()
{
static Network net;
return &net;
}
void Network::initNetwork()
{
if(socket == NULL)
{
socket = new QTcpSocket;
socket->connectToHost("zuozl.top",20006);
connect(socket,SIGNAL(readyRead()),this,SLOT(readyReadSlot()));
}
}
bool Network::sendData(QByteArray data)
{
if(socket !=NULL)
{
if(socket->write(data)>0)
{
return true;
}else{
return false;
}
}
return false;
}
Network::Network(QObject *parent) : QObject(parent)
{
socket = NULL;
}
void Network::readyReadSlot()
{
QByteArray data;
while(socket->bytesAvailable())
{
data.append(socket->readAll());
}
emit sendLoginData(data);
}
#ifndef NETWORK_H
#define NETWORK_H
#include
#include
class Network : public QObject
{
Q_OBJECT
public:
static Network* getNet();
void initNetwork();
bool sendData(QByteArray data);
private:
explicit Network(QObject *parent = nullptr);
signals:
void sendLoginData(QByteArray data);
public slots:
void readyReadSlot();
private:
QTcpSocket *socket;
};
#endif // NETWORK_H
QByteArray data = Protocol::packData("register","id",id,"name",name,"passwd",passwd);
Network::getNet()->initNetwork();
Network::getNet()->sendData(data);
connect(Network::getNet(),SIGNAL(sendLoginData(QByteArray)),this,SLOT(receiveDataslot(QByteArray)));
void Login::receiveDataslot(QByteArray data)
{
// 处理网络接收数据 data
}