提示某个指令引用的内存不能"read",不知道是怎么回事。
 SOCKET sock;
 sock=socket(AF_INET,SOCK_STREAM,0);
 if(INVALID_SOCKET==sock)
 {
  MessageBox("套接字创建失败");
 }
 else{
    SOCKADDR_IN addr;
 addr.sin_family=AF_INET;
 addr.sin_port=htons(80);
 addr.sin_addr.S_un.S_addr=inet_addr("202.108.22.142");
 int ret;
 ret=connect(sock,(SOCKADDR*)&addr,sizeof(SOCKADDR));
 if(SOCKET_ERROR==ret){
 MessageBox("连接失败");
 } 
}
 const char * request="GET / HTTP/1.1\r\n\r\n";
char buffer[1024]="",httpheader[1024]="";
send(sock, request, strlen(request), 0); 
int i=0,j=0;
FILE *fp=fopen("1.txt","a+");
memset(buffer,0,1024);
memset(httpheader,0,1024);
while(recv(sock,buffer,1,0)==1){
   if(i<4){
   if(buffer[0]=='\r'||buffer[0]=='\n') i++;
   else i=0;
   memcpy(httpheader+j,buffer,1);j++;
   }
       else{
   fprintf(fp,"%s",buffer[0]);
   }
}
      fclose(fp);

解决方案 »

  1.   

    while(recv(sock,buffer,1,0)==1)对方是1个字节1个字节给你发过来的吗?
      

  2.   


    调试,加TRACE,设断点,你先把问题点定位了另外,对方是1个字节1个字节给你发过来的吗?
      

  3.   

    不知道,我看一个程序是这么写的,所以就照着写了,不过它是LINUX平台的,它的程序是这样的。
        while((nbytes=read(sockfd,buffer,1))==1)
        {
          if(i < 4)  { /* 获取 HTTP 消息头 */
            if(buffer[0] == '\r' || buffer[0] == '\n')  i++;
            else i = 0;
            memcpy(httpheader + j, buffer, 1); j++;
          }
          else  { /* 获取 HTTP 消息体 */
            fprintf(localfp, "%c", buffer[0]); /* print content on the screen */
            //fprintf(stdout, "%c", buffer[0]); /* print content on the screen */
            i++;
          }
        }
      

  4.   

    COPY代码没关系,但你要实现什么你总清楚吧。
    调试,加TRACE,设断点,你先把问题点定位了。
      

  5.   

    debug打开call stack窗口,看看哪个函数抛出异常
      

  6.   

    感觉上似乎是你的端口号太小了,WINDOWS保留了一部分的端口号,用于系统内部,
    建议你试试把端口号改成4位数吧  你可以试试,而且你SEND之前似乎没有BIND啊
    呵呵   我是来学习的,不是来打酱油de!
    如果不是的话,我也静待结果。
      

  7.   

    while(recv(sock,buffer,1,0)==1){
    if(i<4){
    if(buffer[0]=='\r'||buffer[0]=='\n') i++;
    else i=0;
    memcpy(httpheader+j,buffer,1);j++;//问题是在i>=4之前,j可能大于1024,这样httpheader会越界}
    else{
    fprintf(fp,"%s",buffer[0]);
    }