各位帮忙瞅瞅,这段代码为什么连接失败 
        SOCKET fd; char sendBuf[512];
CString docFileName="d:\\a001.doc";
int sendLen = docFileName.GetLength();

if((fd = socket(AF_INET,SOCK_STREAM,0)) == INVALID_SOCKET)
{
TRACE("SOCKET() ERROR\r\n");
// AfxMessageBox("SOCKET() ERROR\r\n");
return false;
}

解决方案 »

  1.   

    在if块中使用GetLastError()看看错误码是什么?
      

  2.   

    这是完整代码
    SOCKET fd; char sendBuf[512];
    CString docFileName="d:\\a001.doc";
    int sendLen = docFileName.GetLength();
    char recvBuf[64];
    struct sockaddr_in server;
    struct hostent *he;
    memset(sendBuf,0,512);
    strcpy(sendBuf,docFileName.GetBuffer(sendLen));  if((fd = socket(AF_INET,SOCK_STREAM,0)) == INVALID_SOCKET)
    {
    TRACE("SOCKET() ERROR\r\n");
    // int error = GetLastError();

    // AfxMessageBox("SOCKET() ERROR\r\n");
    return false;
    }
    if((he=gethostbyname("localhost"))==NULL)
    {
    TRACE("get local ip error\r\n");
    return false;
    }
    memset(&server,0,sizeof(server));
    server.sin_family = AF_INET;
    server.sin_port = htons(SERVER_PORT);
    server.sin_addr = *((in_addr*)he->h_addr_list[0]);

    if(connect(fd,(sockaddr*)&server,sizeof(sockaddr))==INVALID_SOCKET)
    {
    TRACE("CONNECT ERROR\r\n");
    int error=GetLastError();
    closesocket(fd);
    return false;
    }
    int sendResult = send(fd,sendBuf,sendLen,0);
    if((sendResult==SOCKET_ERROR)||(sendResult!=sendLen))
    {
    TRACE("send request fail \r\n");
    closesocket(fd);
    return false;
    }
    TRACE(sendBuf);
    TRACE("\r\n"); memset(recvBuf,0,64);
        int recvResult = recv(fd,recvBuf,64,MSG_PEEK);
    if((recvResult!=0) && (recvResult!=SOCKET_ERROR))
    {
    CString recvAck(recvBuf,recvResult);
    if(recvAck.CompareNoCase("ok")==0)
    {
    TRACE("receive data ok\r\n");
    closesocket(fd);
    return true;
    }
    }
    TRACE(recvBuf);
    TRACE("\r\n");
    closesocket(fd);
    return false;