bool CSocket::OnConnect(CString hostip,int port) //连接
{
// AfxMessageBox(hostip);
struct sockaddr_in sin;
sin.sin_family=AF_INET;
sin.sin_addr.S_un.S_addr=inet_addr((char *)&hostip);
sin.sin_port=htons(port);
if(::connect(sock,(const sockaddr *)&sin,sizeof(sin))==SOCKET_ERROR)
{
AfxMessageBox("连接失败!");
return false;
}

return true;
}
什么老是连接失败啊!
是不是那里有问题啊?

解决方案 »

  1.   

    从这个函数  看不出来什么问题  你设个断点 看看传进connect函数的参数到底对不对  因为CString强转到char在unicode下是有问题的
      

  2.   


    if(::connect(sock,(const sockaddr *)&sin,sizeof(sin))==SOCKET_ERROR)
    {
    int nError = WSAGetLastError();
    CString str;
    str.Format("Error: 连接失败,错误码:%d", nError );
    AfxMessageBox(str);
    return false;

      

  3.   

    楼主代码里应该多做代码的错误处理,而且网络程序中最好不要出现CSTRING,用char*处理
      

  4.   

    以下代码可以显示中文错误提示信息:
            LPVOID lpMsgBuf;
    FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | 
    FORMAT_MESSAGE_FROM_SYSTEM, 
    0, GetLastError(), 
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), //默认语言
    (LPTSTR)&lpMsgBuf, 0, NULL);
    //显示
    ::MessageBox(0,(LPCTSTR)lpMsgBuf,_T("GetLastError"),MB_OK|MB_ICONINFORMATION );
    //释放内存
    ::LocalFree( lpMsgBuf );