• 4516阅读
  • 5回复

[提问]这段C#代码如何转换成QT代码实现 [复制链接]

上一主题 下一主题
离线纵刀少年
 

只看楼主 倒序阅读 楼主  发表于: 2014-10-14
            String builder str;
            char[] cmgs = str.ToCharArray();
            byte[] message = new byte[1024];
            message = Encoding.UTF8.GetBytes(cmgs);
            socket.Send(message);


我是要用QTcpsock tcpsock变量来发送一段QString
该如何像上面那样做转化?
离线纵刀少年

只看该作者 1楼 发表于: 2014-10-14
似乎这样可以了。
    QByteArray block;
    QDataStream out(&block,QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_5_2);
    out<<quint16(0)<<ui->sendcommandlineEdit->text().toUtf8();
    out.device()->seek(0);
    out<<quint16(block.size()-sizeof(quint16));
离线纵刀少年

只看该作者 2楼 发表于: 2014-10-14
奇怪,我发送“1”,网络助手显示: 00 05 00 00 00 01 31
发送“11”:    接收: 00 06 00 00 00 02 31 31
发送“111”  接收:00 07 00 00 00 03 31 31 31
发送“222” 接受:00 07 00 00 00 03 32 32 32
前面那5个byte似乎和发送的字符数量相关,但我可不想发到这个数据啊。
离线dbzhang800

只看该作者 3楼 发表于: 2014-10-14
回 纵刀少年 的帖子
纵刀少年:奇怪,我发送“1”,网络助手显示: 00 05 00 00 00 01 31
发送“11”:    接收: 00 06 00 00 00 02 31 31
发送“111”  接收:00 07 00 00 00 03 31 31 31
发送“222” 接受:00 07 00 00 00 03 32 32 32
前面那5个byte似乎和发送的字符数量相 .. (2014-10-14 10:42) 

说明你不需要用(或不能用)QDataStream
离线dbzhang800

只看该作者 4楼 发表于: 2014-10-14
不应该直接就是  yourString.toUtf8() 么?
离线纵刀少年

只看该作者 5楼 发表于: 2014-10-14
回 dbzhang800 的帖子
dbzhang800:说明你不需要用(或不能用)QDataStream (2014-10-14 11:17) 

哈哈,好了~就顾着跟书上的例程,我以为TCP通信真要附带发送的数据长度。
既然斑竹大人在,顺便问一下,现在我有一个系统,服务器和GPS终端通过TCP通信。现在担心的是终端发送的某帧数据,若受到干扰之类的原因而无法成功发送到服务器上,从服务器上有办法捕获到这种发送失败的事件吗?(终端和服务器正常情况下是一直连接的)是不是只能通一个帧号之类的识别码让服务器受到数据后再回传到终端,终端要是一段时间收不回之间发出的这个码再重发这种手段?
另外,TCP协议是通信安全的协议吧?就是不会有发错数据之类的问题。
快速回复
限100 字节
 
上一个 下一个