通讯中间件(二)

通讯中间件

最近做的一个小项目是通讯中间件,一端与ERP/MES对接,一端与机台工作软件对接。通讯中间件的目的在于,工作软件不需要支持多种协议即可与ERP/MES进行数据交互。换句话说就是工作软件只需要支持一种通讯协议,能够与中间件进行交互即可,其它的交给中间件,不需要理会ERP/MES端支持哪种协议。目前我的中间件支持UDP,TCP,Modbus-Tcp,Opc-Ua四种通讯协议。(以下内容如有错误,还望指正!)

TCP

今天记录TCP通讯的代码和注意事项。直接上代码

服务端

    m_server = new QTcpServer;
    m_server->listen(QHostAddress(dlg.m_IPstr),9988);
    //当服务器有新的客户端连接时,响应槽函数
    connect(m_server,SIGNAL(newConnection()),
            this,SLOT(slotNewConnect()));
void TcpServer::slotNewConnect()
{
    //先判断服务器是否有还未处理的连接
    while(m_server->hasPendingConnections())
    {
        //服务器去获得新的客户端连接,并返回一个socket
        m_socket = m_server->nextPendingConnection();


        //当这个socket接收到数据时,响应槽函数
        connect(m_socket,SIGNAL(readyRead()),this,SLOT(slotReadyRead()));
    }
}
void TcpServer::slotReadyRead()
{
    //socket先判断是否有接收到数据
    while(m_socket->bytesAvailable() > 0)
    {
        //socket读取所有接收到的数据
        QByteArray buf = m_socket->readAll();
    }
}

客户端

//创建客户端并连接到指定IP服务端9988端口
    m_socketClient = new QTcpSocket;
    m_socketClient->connectToHost(dlg.m_IPstr,9988);
    connect(m_send,SIGNAL(clicked(bool)),this,SLOT(slotButtonClick()));
void TcpClient::slotButtonClick()
{
    QString str = m_EditText->text();
    if(str.isEmpty())
        return;
    //将要发送的数据发出
    m_socketClient->write(str.toUtf8());
}

总结

TCP服务端与客户端的连接是同一个IP地址和端口,以上内容是比较简单的通讯交互。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值