server.h
#ifndef TCPSERVER_H
#define TCPSERVER_H
#include <QWidget>
#include <QTcpSocket>
#include <QTcpServer>
class TcpServer : public QWidget
{
Q_OBJECT
public:
TcpServer(QWidget *parent = 0);
~TcpServer();
private:
QTcpSocket *socket;
QTcpServer *server;
private slots:
void newConnectionSlot();
void readyReadSlot();
};
#endif // TCPSERVER_H
server.cpp
#include "tcpserver.h"
TcpServer::TcpServer(QWidget *parent)
: QWidget(parent)
{
server = new QTcpServer();
connect(server,&QTcpServer::newConnection,this,&TcpServer::newConnectionSlot);
if(server->listen(QHostAddress::Any,8888))
{
qDebug() << "Listening for new connection !";
}
else
{
qDebug() << "Listening failure !";
}
}
TcpServer::~TcpServer()
{
if(server != nullptr)
{
delete server;
server = nullptr;
}
socket = nullptr;
}
void TcpServer::newConnectionSlot()
{
socket = server->nextPendingConnection(); // 将已连接的客户端对象返回
connect(socket,&QTcpSocket::readyRead,this,&TcpServer::readyReadSlot);
}
void TcpServer::readyReadSlot()
{
QByteArray data;
data.append(socket->readAll());
qDebug() << data;
}
client.h
#ifndef TCPCLIENT_H
#define TCPCLIENT_H
#include <QWidget>
#include <QTcpSocket>
class Tcpclient : public QWidget
{
Q_OBJECT
public:
Tcpclient(QWidget *parent = 0);
~Tcpclient();
private:
QTcpSocket *c_socket;
private slots:
void connectedSlot();
};
#endif // TCPCLIENT_H
client.cpp
#include "tcpclient.h"
Tcpclient::Tcpclient(QWidget *parent)
: QWidget(parent)
{
c_socket = new QTcpSocket();
connect(c_socket,&QTcpSocket::connected,this,&Tcpclient::connectedSlot);
c_socket->connectToHost("localhost", 8888);
if(!c_socket->waitForConnected(3000))
{
qDebug() << "connection timeout !";
}
qDebug() << "be connected successfully!";
}
Tcpclient::~Tcpclient()
{
if (c_socket->isOpen())
{
c_socket->disconnectFromHost(); // 与当时连接的主机断开
c_socket->waitForDisconnected(); // 等待与连接的主机断开 阻塞
}
delete c_socket;
}
void Tcpclient::connectedSlot()
{
c_socket->write("Hello server!");
}