影醉阏轩窗

衣带渐宽终不悔,为伊消得人憔悴。
扩大
缩小

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 \n").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不能进行数据的传送!!!

posted on 2017-02-23 19:03  影醉阏轩窗  阅读(1344)  评论(0编辑  收藏  举报

导航

/* 线条鼠标集合 */ /* 鼠标点击求赞文字特效 */ //带头像评论