• 4480阅读
  • 4回复

谁能帮我分析一下这段小代码 [复制链接]

上一主题 下一主题
离线succulent
 
只看楼主 倒序阅读 楼主  发表于: 2008-11-25
— 本帖被 XChinux 执行加亮操作(2008-11-30) —
这是example network 中Threaded Fortune Server的一段代码,位于fortunethread.cpp
思考了好久,还是没法完全理顺
1、2、3都是一些初始化的定义,可以理解
4就看不太懂了,5是把要输出给客户端的信息发送到out上,6则又回到了iodevice的起点?7是做啥的?
8很好理解
9跟10是进行断开的动作,那么客户端怎么还能一次次的从服务器这里读取数据
完全是一团雾水,看英文的解释还是没看明白
能否请有经验的高手给大概解释一下
另外,我现在想实现类似聊天那样,一次向客户端输送一段字符,有没有哪种最简便的实现方法
1    QByteArray block;
2    QDataStream out(&block, QIODevice::WriteOnly);
3    out.setVersion(QDataStream::Qt_4_0);
4    out << (quint16)0;
5    out << text;
6    out.device()->seek(0);
7    out << (quint16)(block.size() - sizeof(quint16));

8    tcpSocket.write(block);
9    tcpSocket.disconnectFromHost();
10    tcpSocket.waitForDisconnected();

离线succulent
只看该作者 1楼 发表于: 2008-11-25
9、10现在可以理解,这个例子里,client每次获取数据时貌似都要重新再连接一次
离线nmiirq

只看该作者 2楼 发表于: 2008-11-25
4    out << (quint16)0;            //先写一个0
5    out << text;    //写text
6    out.device()->seek(0); //回到起始
7    out << (quint16)(block.size() - sizeof(quint16)); //写入块的大小-一个quint16的大小,也就是text占用的大小

应该是这样的,大家给看看~
离线succulent
只看该作者 3楼 发表于: 2008-11-25
重点也许在于6、7,写入text以后,再回到起点,再写入块的大小,这是啥意思呢,text不都写进去了吗
离线htyoung

只看该作者 4楼 发表于: 2008-11-26
引用第3楼succulent于2008-11-25 14:18发表的  :
4    out << (quint16)0;            //先写一个0
5    out << text;    //写text
6    out.device()->seek(0); //回到起始
7    out << (quint16)(block.size() - sizeof(quint16)); //写入块的大小-一个quint16的大小,也就是text占用的大小
应该是这样的,大家给看看~
重点也许在于6、7,写入text以后,再回到起点,再写入块的大小,这是啥意思呢,text不都写进去了吗



out << (quint16)0;  先占2个字节长
out << text;
out.device()->seek(0); //回到起始

out << (quint16)(block.size() - sizeof(quint16)); 将text的字节长放到开始占的两个字节。

这样做是为了接收的时候更加安全,可以校验是否收到了正确的字符或字节长
***
QT5
***
快速回复
限100 字节
 
上一个 下一个