zoukankan      html  css  js  c++  java
  • QT编写TCP的问题

     

    ---->>>TCP编写实战的小项目

     

    TCP套接字:主机(IP+端口) 和 服务器(IP+端口) 进行通讯,需要中间的一个锁套进行  啮合,这个锁套就是套接字的作用。

    其中套接字的使用必须运用数数据流配合才可以。

    第一种:不用套接字+不用数据流操作

    //客户端发送信息

     1 void client::clientSendMessage ()
     2 
     3 {
     4 
     5     QByteArray data;
     6 
     7     data.append(ui->clientMessagelineEdit->text());
     8 
     9     tcp->write(data);
    10 
    11     ui->messagetextBrowser->insertPlainText (tr("send message: %1 
    ").arg (QString(data)));
    12 
    13 }
    14 
    15  

     

    第二种:使用套接字+使用数据流

    void MainWindow::sendMessage()
    
    {
    
     
    
       QByteArray block;//暂时存储我们需要发送的数据
    
       QDataStream out(&block,QIODevice::WriteOnly);//TCP必须和数据流一起使用
    
       out.setVersion(QDataStream::Qt_5_7);//设置数据流的版本(服务器和主机版本一定相同)
    
       out<<(quint16)0;//强制转化,quint16=unsigned short,向头部添加0为了开辟空间存放文件大小
    
       out << tr("123");
    
       out.device()->seek(0);//向头添加数据,类似链表
    
       out <<(quint16)(block.size()-sizeof(quint16));//文件大小
    
       //*************利用“套接字”进行服务器和主机的连接和通讯****************//
    
       QTcpSocket *clientConnection = tcpServer->nextPendingConnection();
    
       connect(clientConnection,SIGNAL(disconnected()),//断开连接同时删除套接字
    
                      clientConnection,SLOT(deleteLater()));
    
       clientConnection->write(block);
    
       clientConnection->disconnectFromHost();//此函数关闭套接字触发disconnected()函数,接着由上面连接触发deleteLater()删除套接字
    
     
    
       ui->label_3->setText("successful sendmessage");
    
    }

     

    注释1.校验的TCP(文件大小+文件信息+文件名+文件),通用的TCP(文件)。当写通用的时候应写后者,当自己使用时可以写前者保证数据准确性,但是一定保证接收端程序也应按照这个格式接受。

          2.通用的软件没有数据流和套接字,自己写的软件都可以加。有数据流的TCP和没有数据流的TCP不能进行数据的传送!!!

  • 相关阅读:
    74.QT窗口实现类的封装
    73,QT指针数组实战(指针数组与数组指针)
    72.函数模板指针与类函数模板的绑定
    71.lambda表达式的递归
    C++ new delete(一)
    ios之@class
    xcode菜单栏
    ios 自定义delegate(一)
    strong&weak
    TCP/UDP
  • 原文地址:https://www.cnblogs.com/wjy-lulu/p/6434975.html
Copyright © 2011-2022 走看看