ps:QT5 用网络头文件要在项目中的.pro文件中加入: QT += network
#include "QtNetwork/QTcpSocket"
#include "QtNetwork/QTcpServer"
1)连接:QTcpsocket里面的connectToHost ("主机ip地址" , 端口号)
2)监听:QTcpserver里面的listen ("主机ip地址", 端口号)
ps: QTcpserver里面有newConnection信号,用于接收连接时触发槽函数
3)写入数据:(数据流)
存放数据: QByteArray msg;
写入数据流:QDataStream out (&msg , QIODevice::WriteOnly);
out << tr ("……");
获取server中的连接:QTcpsocket *socket = server -> nextPendingConnection();
往连接中写入数据: socket -> write (msg);
关闭连接: socket -> disconnectFromHost ();
关闭套接字: connect(socket,
SIGNAL(disconnected()),socket,
SLOT(deleteLater()));
4)读取数据:
利用QTcpsocket的信号readyRead()来触发接收数据后的槽函数:
QTcpSocket *socket = new QTcpSocket;
connect(socket,
SIGNAL(readyRead()),this,
SLOT(readMessage()));
在readMessage()函数中用数据流读取数据:
QDataStream in(socket);
in >> message;
ui->msgEdit->setText(message);
--------------------------------------------------------------
Server(省略了自动生成的部分,只是.cpp里面的部分)
--------------------------------------------------------------
void MainWindow::on_pushButton_clicked()
{
ui->staticlabel->setText("Listening...");
server = new QTcpServer;
if (!server->listen(QHostAddress::Any,8080))
close();
connect(server,SIGNAL(newConnection()),this,SLOT(sendMessages()));
}
void MainWindow::sendMessages()
{
QByteArray msg;
QDataStream out(&msg,QIODevice::WriteOnly);
out << tr("Good Morning :)");
socket = server->nextPendingConnection();
connect(socket,SIGNAL(disconnected()),socket,SLOT(deleteLater()));
socket->write(msg);
socket->disconnectFromHost();
ui->staticlabel->setText("Send Successfully!");
}
--------------------------------------------------------------
Client(省略了自动生成的部分,只是.cpp里面的部分)
--------------------------------------------------------------
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
socket = new QTcpSocket;
connect(socket,SIGNAL(readyRead()),this,SLOT(readMessage()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::newConnect()
{
socket->abort();
QString ip = ui->iplineEdit->text();
QString duan = ui->portlineEdit->text();
int port = duan.toInt();
socket->connectToHost(ip,port);
}
void MainWindow::readMessage()
{
QDataStream in(socket);
in >> message;
ui->msgEdit->setText(message);
}
void MainWindow::on_connectButton_clicked()
{
ui->staticlabel->setText("Link successfully!");
newConnect();
}
----------------------------------------------
效果: