我有一些代码,客户端和服务器之间有TCP连接。我需要将一些xml数据发送到服务器并从中接收响应。我想这样做:
char request[MAX];
sprintf(request, "<attestationRequest><majorVersion>%d</majorVersion><minorVersion>%d</minorVersion></attestationRequest>", major, minor);
write(sockfd,request, length);
while(recv(sockfd, response, MAX, 0) >= 0)
{
cout << "response " << response;
//do something;
}
但收到的数据是(预期回复+请求)。
如果我尝试使用QString
填充数据,则收到的数据是正确的。
QString request = QString("<attestationRequest>"
"<majorVersion>%1</majorVersion>"
"<minorVersion>%2</minorVersion>"
"</attestationRequest>")
.arg(major)
.arg(minor)
其余代码对于这两种情况都是相同的。我使用sprintf
时收到的数据超过11000字节,QString
时收到9000字节。我无法理解我是否遗漏了什么。
答案 0 :(得分:2)
IMO两种解决方案都不好 使用QXmlStreamWriter更安全,更好。在大多数情况下,对文本的手动操作将以错误编码或丢失转义序列或其他xml格式违规结束。
其他问题是您没有提供任何数据如何进行沟通。很可能是导致您出现问题的错误。
答案 1 :(得分:0)
最有可能的问题是,UTF-16数据是通过连接发送的(即QString。)
也许如果您尝试了这些命令的w_char版本,它可能会成功。