recv 收不到东西 一收返回值就是0
多recv 几次就返回 SOCKET_ERROR了
为什么?
int nReturnValue;
SOCKET ss;
ss = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
struct sockaddr_in addr;
memset(&addr,0,sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(80);
hostent * h = gethostbyname("www.163.net");
memcpy(&addr.sin_addr.s_addr,h->h_addr_list[0],h->h_length);
nReturnValue = connect(ss,(sockaddr *)&addr,sizeof(addr));
char szTempBuffer[1024*8];
sprintf(szTempBuffer,"%s","GET / HTT/P1.1");
sprintf(szTempBuffer,"%s\r\n%s",szTempBuffer,"Accept: */*");
sprintf(szTempBuffer,"%s\r\n%s",szTempBuffer,"User-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)");
sprintf(szTempBuffer,"%s\r\n%s",szTempBuffer,"Referer: http://210.5.31.13:80/bbs/Login.asp");
sprintf(szTempBuffer,"%s\r\n%s",szTempBuffer,"\r\n");
nReturnValue = send(ss,szTempBuffer,strlen(szTempBuffer),0);
nReturnValue = recv(ss,szTempBuffer,sizeof(szTempBuffer),0);
closesocket(ss);

解决方案 »

  1.   

    顺便说一下 send 的 nReturnValue 是 138 正好是 strlen得到的长度 也就是说发送是成功的,为什么一接收就出问题啊
      

  2.   

    sprintf(szTempBuffer,"%s","GET / HTT/P1.1"); 这句没问题?? 
    估计是命令错了,所以对方的回应与你的操作有差别!
      

  3.   

    就算HTTP应答写错了 跟 recv 函数执行的返回值是 0 也没关系啊 那是协议上的问题呀
    我发现越发的鬼大了我自己写了个简单 server 监听 看自己发过来东西不 nnd 那边 recv sned 一切 返回值都正常 代码如下 WORD wVersionRequested;
    WSADATA wsaData;
    wVersionRequested = MAKEWORD( 2, 2 ); 
    WSAStartup(wVersionRequested, &wsaData );
    int nReturnvalue = -1;
    SOCKET s_server;
    nReturnvalue = s_server = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); struct sockaddr_in addr;
    memset(&addr,0,sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_port = htons(1234);
    addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
    nReturnvalue = bind(s_server,(sockaddr*)&addr,sizeof(addr));
    nReturnvalue = listen(s_server,10);
    SOCKET s_sendrecv;
    struct sockaddr_in ServerSocketAddr;
    int addrlen;
    addrlen=sizeof(ServerSocketAddr);
    s_sendrecv = accept(s_server,(sockaddr*)&ServerSocketAddr,&addrlen);
    char szTemp[8*1024];
    nReturnvalue = recv(s_sendrecv,szTemp,sizeof(szTemp),0);
    //AfxMessageBox(szTemp);
    sprintf(szTemp,"%s","asfdasdfasfdasfdasdfasdf");
    nReturnvalue = send(s_sendrecv,szTemp,strlen(szTemp),0); WSACleanup ();