美文网首页
qt tcp socket通信实现字符串传输

qt tcp socket通信实现字符串传输

作者: 云胡同学 | 来源:发表于2017-12-12 22:32 被阅读0次

QTcpServer的基本操作:
1、调用listen监听端口。
2、连接信号newConnection,在槽函数里调用nextPendingConnection获取连接进来的socket。

QTcpSocket的基本能操作:
1、调用connectToHost连接服务器。
2、调用waitForConnected判断是否连接成功。
3、连接信号readyRead槽函数,异步读取数据。
4、调用waitForReadyRead,阻塞读取数据。

服务器端

  1. 新建一个服务器端工程,填入
QT += network
#include<QtNetwork/QtNetwork>
  1. mainwindows.h文件中加入成员
public:
    void init();
private slots:
    void sendMessage(); //发送消息
    void onReciveData();  //接收数据
    void newListen(); //建立tcp监听事件
    void acceptConnection(); //接收客户端连接
    void showError(QAbstractSocket::SocketError); //错误输出
private:
    QTcpSocket *tcpSocket;
    QTcpServer *tcpServer;
   // QTimer *timer;
  1. 函数的定义
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    init();

    setWindowTitle(QString::fromLocal8Bit("Server"));
    connect(ui->sendBtn,SIGNAL(clicked(bool)),SLOT(sendMessage()));
}

构造函数中,调用init()函数,当点击了发送按钮就会产生一个槽函数sendMessage,然后直接调用这个槽函数。

void MainWindow::init()
{
   // timer = new QTimer;

    tcpServer = new QTcpServer;
    tcpSocket = new QTcpSocket;
    newListen();
    connect(tcpServer,SIGNAL(newConnection()),SLOT(acceptConnection()));
    connect(tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)),SLOT(showError(QAbstractSocket::SocketError)));
}

新建一个QTcpServer类的对象,和QTcpSocket类的对象。调用newlisten()监听服务器的socket请求函数,有新的连接的时候,调用acceptConnection()函数,失败的话调用showError()。

void MainWindow::newListen()
{
    if(!tcpServer->listen(QHostAddress::Any,6666))
    {
        qDebug()<<tcpServer->errorString();

        tcpServer->close();
    }
}

QHostAddress::Any 4 双any-address栈,与该地址绑定的socket将侦听IPv4,6666端口。

void MainWindow::acceptConnection()
{
    tcpSocket = tcpServer->nextPendingConnection();
    connect(tcpSocket,SIGNAL(readyRead()),SLOT(onReciveData()));
}

连接成功后,连接信号readyRead(),调用onReciveData()。

void MainWindow::sendMessage()  //发送数据
{
    QString textEdit = ui->lineEdit->text();
    QString strData =QString::fromLocal8Bit("Time: ") + QTime::currentTime().toString() + "\n" + textEdit.toLocal8Bit() + "\n";
    QByteArray sendMessage = strData.toLocal8Bit();
    mChat += ("Send " + sendMessage);
    ui->textEdit->setText(mChat);
    tcpSocket->write(sendMessage);
}

void MainWindow::onReciveData()  //读取数据
{
    QString data = tcpSocket->readAll();
    qDebug()<<data;
    mChat +=("Recv " + data);
    ui->textEdit->setText(mChat);
}

发送数据,获取编辑框中的字符串,发送。

相关文章

  • qt tcp socket通信实现字符串传输

    QTcpServer的基本操作:1、调用listen监听端口。2、连接信号newConnection,在槽函数里调...

  • Java socket

    Java Socket实现基于TCP和UDP多线程通信Java Socket编程

  • Kotlin网络编程(3)TCP Socket 低层次网络编程

    TCP Socket 通信概念TCP Socket 通信过程Socket 类ServerSocket 类案例:文件...

  • Socket

    Socket通信原理 TCP/IP协议族包括传输层、网络层、链路层 TCP、UDP、IP、ICMP、IGMP、AR...

  • socket原理

    socket理解 -套接字socket是通信的基石,是介于传输层(tcp/udp)和应用层(http等)之间,支持...

  • Socket

    Socket socket是什么 socket是什么?socket在哪?先了解TCP/IP协议 TCP/IP:传输...

  • socket通信(二)

    socket的封装 通过前面的socke通信(一),socket就是基于TCP/IP协议进行数据传输的, 基尽管实...

  • JAVA Socket Tcp文件传输

    Java Socket TCP通信 --传输数据篇 举个栗子:客户端 创建外部调用接口 创建TcpClient 服...

  • socket通讯认知

    tcp:传输控制协议udp:用户数据协议,于tcp对应的协议 socket 是应用层与tcp/IP协议族通信的中间...

  • WebService

    常见的远程调用协议与技术 IOS的七层模型: Socket通信:Socket属于传输层,它是对TCP/IP协议的实...

网友评论

      本文标题:qt tcp socket通信实现字符串传输

      本文链接:https://www.haomeiwen.com/subject/mvjoixtx.html