用CSocket做FTP客户端时,Send总是发送不出去数据呢?服务器端是SERV-U 6002.代码如下:
CString m_Command, m_Receive;
DWORD dw_Error;AfxSocketInit();//*********初始化Socket
if(!m_Sync.Create(21,SOCK_STREAM,NULL))//*********建立Socket
{
    MessageBox(_T("建立Socket失败"));
    return;
}if(!m_Sync.Connect(_T("218.25.63.195"),21))
{
    m_Sync.Close();
    m_Status.SetWindowTextW(_T("连接到[218.25.63.195]时失败"));
    return;
}
char lp_Buffer[64] = {0};m_Sync.Receive(lp_Buffer,64);
m_Receive += lp_Buffer;
m_Status.SetWindowTextW((LPCTSTR)m_Receive);
memset(lp_Buffer,0,64);m_Command = "USER web176804 \r\n";
if(!m_Sync.Send((LPCTSTR)m_Command,m_Command.GetLength()))
{
    m_Sync.Close();
    m_Status.SetWindowTextW(_T("发送用户验证时失败"));
    return;
}
dw_Error = GetLastError();
m_Sync.Receive(lp_Buffer,64,0);
m_Receive += lp_Buffer;
m_Status.SetWindowTextW((LPCTSTR)m_Receive);调试时,Send通过了,GetLastError返回了0,在Send后的Receive中,总是循环接收.等了好久,收到421 Maximum session time exceeded - closing.,查看了SERV-U的日志,发现只有已经连接的,没有用户登陆的.然后就断开连接了.

解决方案 »

  1.   

    我写的一段调试程序可以用:
    //返回服务器信息
    ret = recv(m_ThreadData[i].m_hCommandSocket, szBuffer, 4028, 0);
    szBuffer[ret]=0;
    TRACE(_T(szBuffer));
    //登陆请求
    sprintf(szBuffer, "USER %s\r\n", m_szUserName);
    send(m_ThreadData[i].m_hCommandSocket, szBuffer, strlen(szBuffer), 0);
    ret = recv(m_ThreadData[i].m_hCommandSocket, szBuffer, 4028, 0);
    _string = szBuffer;
    _string[ret] = '\0';
                      //太长了,拆分一下
    if (strlen(_string.c_str())>=512)
    {
    string _temp;
    _temp = _string.substr(0, 511);
    TRACE(_T(_temp.c_str()));
    _temp = _string.substr(511, _string.size());
    TRACE(_T(_temp.c_str()));
    }
    else