• 〖Linux〗Qt+gsoap开发客户端程序,服务端地址设定的字符串转换处理


    之所以写出来,是由于经常因为这个问题屡屡丢面子..

    一般情况下,QString转换成(char*),我们一般直接使用:

      char *str = qstr->text().toLatin1().data();

    当然这也本身就一点问题也没有,假如得到的str为"123",那么str就点4个字符的空间,最后一个字符是''

    可就是这么一个'',在设定gsoap的server的时候,它并不需要,被坑了好几回了,..

      出错的信息大概都是这样子的:

    Starting /media/Study/Workspace/Qt/build-zigbeeClient-Desktop-Release/zigbeeClient...
    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:SOAP-ENC="http://www.w3.org/2003/05/soap-encoding" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns="http://localhost:8888"><SOAP-ENV:Body><ns:temp SOAP-ENV:encodingStyle="http://www.w3.org/2003/05/soap-encoding"><subdev>49</subdev></ns:temp></SOAP-ENV:Body></SOAP-ENV:Envelope>
    接着,程序就死在这里..

      或者是这样子的出错信息:

    SOAP 1.2 fault: SOAP-ENV:Sender[no subcode]
    "Host not found"
    Detail: get host by name failed in tcp_connect()

    解决方法其实很容易的,就把最后一个字符''去掉了就好了,我是这么写的:

        char *custserver = ui->serverlineEdit->text().toLatin1().data();
        char *custservertmp = (char *)malloc(strlen(custserver));       //to avoid the end of ''
        strncpy(custservertmp,custserver,strlen(custserver));           //to avoid the end of ''

    解析,假如custserver为"127.0.0.1:4567",使用strlen(custserver)得到的长度是14,而实际custserver占用的空间为15

    那么,再定义一个char *custservertmp,分配空间为14,使用strncpy,把custserver前边的14个字符复制给custservertmp;

    然后,设定好服务端的地址,gsoap+Qt客户端运行很OK。

  • 相关阅读:
    php多进程和多线程的比较
    设计模式学习系列——建造者模式
    设计模式学习系列——单例模式
    设计模式学习系列——前言
    设计模式学习系列——工厂模式
    记一次给nginx的web服务器目录加软链接
    某公司后端开发工程师面试题学习
    2010年腾讯前端面试题学习(jquery,html,css部分)
    2010年腾讯前端面试题学习(js部分)
    winfrom 隐藏任务栏(win7)
  • 原文地址:https://www.cnblogs.com/scue/p/3485049.html
Copyright © 2020-2023  润新知