本帖最后由 VisualEleven 于 2012-09-04 11:41:45 编辑

解决方案 »

  1.   

    #include "stdafx.h"#include <stdio.h>
    #include <stdlib.h>
    #include <winsock2.h>
    #pragma comment(lib, "WS2_32.lib")//建立一个http tcp 连接的辅助函数
    int htconnect(char *domain, int port)
    {
    int white_sock;
    struct hostent *site;
    struct sockaddr_in me;

    //获得服务器的名称
    site = gethostbyname(domain);
    if(NULL == site)
    {
    return (-2);
    }
    //建立套接字
    white_sock = socket(AF_INET, SOCK_STREAM, 0);
    if(white_sock < 0)
    {
    return (-1);
    }
    //初始化为0
    memset(&me, 0, sizeof(struct sockaddr_in));
    memcpy(&me.sin_addr, site->h_addr_list[0], site->h_length);
    me.sin_family = AF_INET;
    me.sin_port = htons(port);

    //建立连接
    return ( (connect(white_sock, (struct sockaddr*)&me, sizeof(struct sockaddr))<0)?1:white_sock );  
    }void main(int argc, char** argv)
    {
    WSAData wsaData;
    WSAStartup(MAKEWORD(2, 2), &wsaData);
    int black_sock;
    if(argc < 2)
    {
    printf("usage:\nwClient host\n");
    return;
    }
    black_sock = htconnect(argv[1], 80);

    if (black_sock<0)
    {
    printf ( "Socket Connect Error!\n") ;
    return ;
    }

    char *msg = "GET / HTTP/1.1\r\n\r\n";
    if( send(black_sock, msg, strlen(msg), 0)<0 )
    {
    perror("error in send msg\n");
    exit(1);
    } char buf[1024] = {0};
    int i = 0;
    while((i=recv(black_sock,buf,sizeof(buf), 0))>0)
    {
    printf("\n[%s]\n",buf);
    memset(buf, 0, sizeof(buf));
    }
    printf("\n------end---------\n");
    closesocket(black_sock);
    WSACleanup();
      

  2.   

    或者用wininet的CInternetSession::OpenURL(_T("http://www.baidu.com"))
      

  3.   

    我是LINUX C的~请问下有什么好的解决办法么?或者能告诉我这个原因什么?谢谢~
      

  4.   

    1、http协议的数据接收应该分两步进行,先接收头(到一个空行结束),然后解析头
       头中间通常有"Content-Length:"域,按其中指示的字节数接收其实体内容
       如果没有"Content-Length:"域,建议接收按1-254字节循环recv,并且根据服务端的响应及网络情形,设置合理的套接字数据接收超时2、即使是html数据,也不要简单地认为其一定符合c字符串规则,所以对于接收的字节码,还是要进行一些处理,比如其中可能含有NULL('\0')字节,把它简单地处理为空格...
      

  5.   

    你的printf代码有问题,当接收的字节不等于2000的时候,尤其最后一次的时候,你会把上次接收的字节打出来,看起来不像是结尾
      

  6.   

    这里有 HTTP 客户端和服务器的代码,你可以参考.
    来自《WinSock网络编程经络》,源码下载地址:http://download.csdn.net/detail/geoff08zhang/4571358