今天测试自己的程序的时候突然发现有一个地方总是会多出一个串, 然后我打开日志开关来测, 发现这个串奇迹般的没有了。。。。
我写了3个接口, 其他两个接口是在子线程里面处理的, 这个出错的接口是在主线程里面处理的。 逻辑完全一样。。。。为毛偏偏主线程里面出错
POST http://10.1.3.219:18003.POST/client/getToken.do HTTP/1.1
Host: 10.1.3.219:18003.POST
多了这个POST, 让我百思不得其姐啊, 于是我来调试一下,看哪里出问题了, 你妹,调试到最后居然这个串又奇迹般的没有了。。。。
先冷静下来, 看看声明:
private:
SOCKET m_sckMain; //socket主句柄
sockaddr_in m_addr; //地址族对象
char m_lpHostName[nMAX_URL_LEN]; //HTTP请求主机名
char m_lpHostPort[6]; //主机端口
char m_lpMethod[5]; //请求方法
char m_lpUrl[nMAX_URL_LEN]; //请求URL
char m_lpHeaders[nMAX_PACKET_LEN]; //附加的请求头
char m_lpCookies[nMAX_PACKET_LEN]; //服务器返回的Cookies
char m_szProxyName[128];//ie代理主机ip
char m_szProxyPort[8];//ie代理主机端口
红色部分给了我灵感, 这个POST不就是方法名吗? 哦, 这个端口一定是在取得时候找不到\0所以一直取到Method的结尾了
看看构造函数的初始化部分:
memset(m_lpHostName, 0, nMAX_URL_LEN);
memset(m_lpMethod, 0, 5);
memset(m_lpUrl, 0, nMAX_URL_LEN);
memset(m_lpHeaders, 0, nMAX_PACKET_LEN);
memset(m_szProxyName, 0, sizeof(m_szProxyName));
memset(m_szProxyPort, 0, sizeof(m_szProxyPort));
原来我根本就没有对这个PORT进行置空处理, 当我加上memset(m_lpHostPort, 0, sizeof(m_lpHostPort));就好了。
问题算是解决了。。。
但是让我疑惑的是:为毛仅仅是在这个接口里面出错呢?仅仅是因为在主线程中处理?
我靠,看来我得再看看线程内存分配的问题, 主线程与子线程的区别
----综上所述, 初始化虽是小事, 但不干的话就会带来大事了