赞
踩
- #ifndef MAINWINDOW_H
- #define MAINWINDOW_H
-
- #include <QMainWindow>
-
- QT_BEGIN_NAMESPACE
- namespace Ui { class MainWindow; }
- QT_END_NAMESPACE
-
- class MainWindow : public QMainWindow
- {
- Q_OBJECT
-
- public:
- MainWindow(QWidget *parent = nullptr);
- ~MainWindow();
-
- private slots:
- void on_radioButton_2_clicked(bool checked);
-
- void on_radioButton_clicked(bool checked);
-
- void on_pushButton_3_clicked();
-
- void on_pushButton_5_clicked();
-
- void on_radioButton_3_clicked(bool checked);
-
- private:
- Ui::MainWindow *ui;
- };
- #endif // MAINWINDOW_H
- #include "mainwindow.h"
-
- #include <QApplication>
-
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- MainWindow w;
- w.show();
- return a.exec();
- }
- //UDP
- void MainWindow::on_radioButton_3_clicked(bool checked)
- {
- ui->pushButton_3->setText("打开");
- }
- //TCP服务器端
- void MainWindow::on_radioButton_2_clicked(bool checked)
- {
- if(checked){
- ui->pushButton_3->setText("开始监听");
- //关联信号与槽
- connect(server,&QTcpServer::newConnection,this,&MainWindow::accept_connect);
- }
- }
- //TCP客户端
- void MainWindow::on_radioButton_clicked(bool checked)
- {
- if(checked){
- ui->pushButton_3->setText("链接网络");
- //关联信号与槽
- connect(socket,&QTcpSocket::readyRead,this,&MainWindow::read_date);
- //取消新的链接请求
- disconnect(connect(server,&QTcpServer::newConnection,this,&MainWindow::accept_connect));
- //取消服务器的监听
- server->close();
- }
- }
- //链接网络与开始监听按钮
- void MainWindow::on_pushButton_3_clicked()
- {
- //TCP服务器
- if(ui->pushButton_3->text() == "开始监听")
- {
- //获取端口
- QString local_port = ui->lineEdit_port_1->text();
- //开始监听
- if(server->listen(QHostAddress::Any,local_port.toShort()))
- {
- ui->label_4->setText("正在监听");
- }else
- {
- ui->label_4->setText("监听失败");
- }
- }
- //TCP客户端
- if(ui->pushButton_3->text() == "链接网络")
- {
- //获取端口和IP
- QString ip = ui->lineEdit_ip_2->text();
- QString port = ui->lineEdit_port_2->text();
- //链接服务器
- socket->connectToHost(ip,port.toInt());
-
- }
- //判断是链接网络还是监听
- if(ui->pushButton_3->text() == "打开")
- {
- //获取端口和IP
- QString ip1 = ui->lineEdit_ip_1->text();
- QString port1 = ui->lineEdit_port_1->text();
- //建立连接
- udp->bind(QHostAddress::Any,port1.toInt());
- qDebug() << "Listening on port1 " << port1;
- connect(udp,&QUdpSocket::readyRead,this,&MainWindow::read_date);
- }
- }
- //新的链接请求
- void MainWindow::accept_connect()
- {
- int ret = QMessageBox::warning(this, tr("链接提示"),
- tr("有新的客户端链接是否接收请求\n"),
- QMessageBox::Yes|QMessageBox::No);
- if(ret == QMessageBox::Yes) //接收链接
- {
- new_socket = server->nextPendingConnection();
- qDebug() << new_socket->peerAddress().toString();
- //关联可读信号
- connect(new_socket,&QTcpSocket::readyRead,this,&MainWindow::read_date);
- }
- }
- //接收
- void MainWindow::read_date()
- {
- if (ui->pushButton_3->text() == "开始监听")
- {
- ui->plainTextEdit->appendPlainText(new_socket->readAll());
- }
- else if (ui->pushButton_3->text() == "链接网络")
- {
- ui->plainTextEdit->appendPlainText(socket->readAll());
- }
- // if (ui->pushButton_3->text() == "打开"){
- // qDebug() << "有数据可读";
- // //判断是否有网络数据
- // while (udp->hasPendingDatagrams()) {
- // //把所有数据读到 datagram
- // QNetworkDatagram datagram = udp->receiveDatagram();
- // //输出数据
- // qDebug() << datagram.senderAddress().toString();
- // qDebug() << datagram.senderPort();
- // qDebug() << datagram.data();
- // ui->plainTextEdit->appendPlainText(udp->readAll());
- // }
- // }
- if (ui->pushButton_3->text() == "打开"){
- char buf[1024]={0};
- QHostAddress ip;
- unsigned short port=0;
- udp->readDatagram(buf,1024,&ip,&port);
- ui->plainTextEdit->appendPlainText(buf);
- }
- }
-
- //发送
- void MainWindow::on_pushButton_5_clicked()
- {
- //服务器
- if(ui->pushButton_3->text() == "开始监听")
- {
- QString msg = ui->plainTextEdit_2->toPlainText();
- qDebug() << msg;
- new_socket->write(msg.toUtf8());
- }
- //客户端
- if(ui->pushButton_3->text() == "链接网络")
- {
- QString msg = ui->plainTextEdit_2->toPlainText();
- qDebug() << msg;
- socket->write(msg.toUtf8());
- }
- //UDP发送端
- if(ui->pushButton_3->text() == "打开")
- {
- QString ip2 = ui->lineEdit_ip_2->text();
- QString port2 = ui->lineEdit_port_2->text();
- QString msg = ui->plainTextEdit_2->toPlainText();
- udp->writeDatagram(msg.toUtf8(),QHostAddress(ip2),port2.toInt());
- }
- }
-
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。