window的QT作为TCP客户端,ubuntu的python作为TCP服务端

客户端

*.pro文件加入

QT       += network

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTcpSocket>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:

    void on_pushButton_Connect_clicked();

    void on_pushButton_Send_clicked();

    void socket_Read_Data();

//    void socket_Disconnected();

private:
    Ui::MainWindow *ui;
    QTcpSocket *socket;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QPushButton"
#include "QTime"
#include "QTextCodec"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    resize(1000,800);
    socket = new QTcpSocket();

    //连接信号槽
    QObject::connect(socket, &QTcpSocket::readyRead, this, &MainWindow::socket_Read_Data);
    connect(ui->pushButtondelete,&QPushButton::clicked,this,[=](){

        socket->disconnectFromHost();
        ui->pushButton_Connect->setText("连接");
        ui->pushButton_Send->setEnabled(false);
        qDebug() << "Disconnected!";
    });
    connect(ui->pushButtonclear,&QPushButton::clicked,this,[=](){

        ui->textEdit_Send->setPlainText("");
        ui->textEdit_Recv->setPlainText("");
    });
    ui->pushButton_Send->setEnabled(false);
    ui->lineEdit_IP->setText("192.168.1.103");
    ui->lineEdit_Port->setText("1234");

}

MainWindow::~MainWindow()
{
    delete this->socket;
    delete ui;
}

void MainWindow::on_pushButton_Connect_clicked()
{
    if(ui->pushButton_Connect->text() == tr("连接"))
    {
        QString IP;
        int port;

        //获取IP地址
        IP = ui->lineEdit_IP->text();
        //获取端口号
        port = ui->lineEdit_Port->text().toInt();

        //取消已有的连接
        socket->abort();
        //连接服务器
        socket->connectToHost(IP, port);

        //等待连接成功
        if(!socket->waitForConnected(30000))
        {
            qDebug() << "Connection failed!";
            return;
        }
        qDebug() << "Connect successfully!";

        //发送按键使能
        ui->pushButton_Send->setEnabled(true);

    }

}

void MainWindow::on_pushButton_Send_clicked()
{
    qDebug() << "Send: " << ui->textEdit_Send->toPlainText();
     //获取文本框内容并以ASCII码形式发送
    QTextCodec *c = QTextCodec::codecForName("UTF-8");
    QTextEncoder* codec = c->makeEncoder(QTextCodec::IgnoreHeader);
    QByteArray sendData = codec->fromUnicode(QString(ui->textEdit_Send->toPlainText()));

    socket->write(sendData);
    socket->flush();
}

void MainWindow::socket_Read_Data()
{
    QByteArray buffer;
    QTime nowtime = QDateTime::currentDateTime().time();
    //读取缓冲区数据
    buffer = socket->readAll();
    if(!buffer.isEmpty())
    {
        QString str = ui->textEdit_Recv->toPlainText();
        str+="[";
        str+=nowtime.toString("hh:mm:ss");
        str+="]192.168.1.103:";
        str+=trUtf8(buffer);
        str+='\n';
        //刷新显示
        ui->textEdit_Recv->setText(str);
    }
}


main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

ui界面

服务端

# coding=utf-8
import socket  # socket模块
# import commands  # 执行系统命令模块
if __name__ == "__main__":

    HOST = '192.168.1.103'
    PORT = 1234
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 定义socket类型,网络通信,TCP
    s.bind((HOST, PORT))  # 套接字绑定的IP与端口
    s.listen(1)  # 开始TCP监听
    while 1:
        conn, addr = s.accept()  # 接受TCP连接,并返回新的套接字与IP地址
        print('Connected by', addr)  # 输出客户端的IP地址
        print("等待消息")
        while 1:
                  
            data = conn.recv(100)  # 把接收的数据实例化
            if data:
                print(">>>",data.decode())
                conn.sendall(data)
            else:
                conn, addr = s.accept()
    conn.close()  # 关闭连接

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jjm2002

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值