随笔-9  评论-6  文章-5  trackbacks-0
就是一个POST的提交,结构搞晕我了。

搞不清楚为什么GET方式没效果,而POST有效果,却提示“Run-Time Check Failure #2 - Stack around the variable 'dest' was corrupted.”
好晕倒啊!!老衲没办法了,毕竟对com不熟。记下状况以后来研究研究。

#include "Visitor.h"

#include 
<stdio.h>
#include 
<iostream>
#include 
"winsock.h" 
#pragma comment(lib,
"ws2_32.lib")  
#define winsock_version 0x0101

using  namespace  std;

#include 
"URL.h";

Visitor::Visitor(
void)
{
}

Visitor::
~Visitor(void)
{
}

char * Visitor::POST(char * host,char* pathAndQuery, char * parms)
{
    
char * requestString = new char[4000];
    memset(requestString,
0,4000);
    
if(strlen(parms) > 0)
        strcat(requestString,
"POST ");
    
else
        strcat(requestString,
"GET ");
    strcat(requestString,pathAndQuery);
    strcat(requestString,
" HTTP/1.1\r\n");
    strcat(requestString,
"Host: ");
    strcat(requestString,host);
    
    strcat(requestString,
"\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n");
    strcat(requestString,
"Accept-Language: zh-cn,zh;q=0.5\r\n");
    strcat(requestString,
"User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648;\r\n");
    strcat(requestString,
"UA-CPU: x86\r\n");
    strcat(requestString,
"Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7\r\n");
    
//strcat(requestString,"Accept-Encoding: gzip, deflate\r\n");
    strcat(requestString,"Connection: Keep-Alive\r\n");
    
    
if(strlen(parms) > 0){
        strcat(requestString,
"Content-Type: application/x-www-form-urlencoded\r\n");
        strcat(requestString,
"Content-Length: ");
        
char * p = new char[4];
        itoa(strlen(parms),p,
10);   
        strcat(requestString,p);
        strcat(requestString,
"\r\n\r\n");
        strcat(requestString,parms);
    }
    
//cout << requestString;

    WSADATA wsadata;
    LPHOSTENT lphostent; 
    SOCKET hsocket;
    SOCKADDR_IN saServer;
    
int nRet;
    
if(WSAStartup(winsock_version,&wsadata))
    {
        
    }
    lphostent 
= gethostbyname(host);
    hsocket 
= socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    saServer.sin_family 
= AF_INET;
    saServer.sin_port 
= htons(80);
    saServer.sin_addr 
= *((LPIN_ADDR)*lphostent->h_addr_list);
    nRet 
= connect(hsocket, (LPSOCKADDR)&saServer, sizeof(SOCKADDR_IN));
    nRet 
= send(hsocket, requestString, strlen(requestString), 0); 
    
char dest[1000];
    nRet
=1;   
    
int bytes = 0;
    
while(nRet>0)  
    {
        nRet 
= recv(hsocket,(LPSTR)dest,sizeof(dest),0);
        
if(nRet > 0)   
            dest[nRet] 
= 0;   
        
else{
            
//dest[0] = 0;  
            break;
        }
        
//printf("\nReceived   bytes:%d\n",nRet);   
        try{
        cout 
<< dest;
        }
catch(exception ex){}
        bytes 
+= nRet;
    }
    closesocket(hsocket);
    
//delete []dest;
    printf("\nReceived   bytes:%d\n",bytes);   
    delete requestString;
    
return "";
}

posted on 2008-11-05 16:55 BirdsHover 阅读(2863) 评论(1)  编辑 收藏 引用

评论:
# re: 搞不清楚状况,Stack around the variable 'dest' was corrupted. 2012-12-17 13:47 | fsdf
楼主你的dest缓冲区大小事1000,最后包含的是结束符'\0',所以你在recv函数中的大小应该是sizeof(dest) - sizeof(char)  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理