参考:https://www.bilibili.com/video/BV1zZ4y1M7QZ?from=search&seid=15187545925326708866
- netstat -ano
测试:在终端输入 telnet 12.0.0.1 8888(即链接自己的端口)
此时输入数据会在应用程序输出中呈现
注:0.0.0.0代表任何ip
127.0.0.1代表自己的网卡
引入qobject的最大好处:
可以自定义信号和槽
工程文件引入network(+=network)
- 使用lisen开启端口:
server.cpp
#include "server.h"
Server::Server(QObject *parent) : QTcpServer(parent)
{
//初始化的时候实现监听
listen(QHostAddress::Any,8888);
}
void Server::incomingConnection(qintptr handle)
{
qDebug()<<"有一个连进来"<<endl;
sock = new QTcpSocket(this);
sock->setSocketDescriptor(handle);
connect(sock,&QTcpSocket::readyRead,this,&Server::receiveMessage);
}
void Server::receiveMessage()
{
if(sock->bytesAvailable())
{
char buffer[1024];
sock->read(buffer,sock->bytesAvailable());
qDebug()<<buffer;
}
}
server.h
#ifndef SERVER_H
#define SERVER_H
#include <QObject>
#include<QTcpServer>
#include<QTcpSocket>
#include<QDebug>
class Server : public QTcpServer
{
Q_OBJECT
public:
explicit Server(QObject *parent = nullptr);
private:
QTcpSocket* sock;
signals:
private slots:
void incomingConnection(qintptr handle) override;
void receiveMessage();
};
#endif // SERVER_H
widget.h
注:在widget.h里实例化对象,即完成了初始化
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include"server.h"
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
Server my_server;
};
#endif // WIDGET_H