现在在PC机(xp)和PDA(WinCE5)之间建立TCP连接,采用CSocket类进行文件传输通讯,PDA端采用CESocket类。遇到一个很奇怪的问题,PDA向PC机发送文件(470k),大约需要1min的时间;而PC机向PDA发送文件(1.37M),只需要5秒左右。PDA采用的是ARMV4I的CPU。请问问题出在哪里?与WinCE系统的定制有关?还是什么别的?

解决方案 »

  1.   

    WinCE当然和PC机器的不一样;前者要求低内存,估计缓存比较小;
      

  2.   

    PDA向PC机发送文件(470k),大约需要1min的时间;不可能吧,蓝牙都不止这速度了。如果是缓冲区问题的话感觉不也应该是发慢接快。
    一般情况下都应该是发送比接收要快的。
      

  3.   

    下面将源代码贴出,请指导:
    void CTCP_EVCDlg::sendOneFile(CString fileName)
    {
    CFile transFile;
    CFileException e; if (transFile.Open(fileName,CFile::modeRead, &e))
    {
    UINT fLength = transFile.GetLength();

    UINT dwRead = 0;
    char* send = new char[MTU]; //MTU---8192
    while (dwRead < fLength)
    {
    UINT dw = transFile.Read(send, MTU);
    m_psockClient.Send(send, dw); dwRead += dw;
    } transFile.Close(); delete []send;
    }

    }
      

  4.   

    你先把m_psockClient.Send(send, dw); 注掉
    看看是不是读文件的问题
    如果很快的话就应该是接收端的问题,是不是CSocket跨线程使用等
      

  5.   

    PC接收端程序
    void CTransferSocket::OnReceive(int nErrorCode) 
    {
    // TODO: Add your specialized code here and/or call the base class
    UINT len= 481078;//文件大小为已知 CFile recvFile;
    CString fileName;
    fileName.Format("D:\\ab_%d.bmp",picNum);
    if (!recvFile.Open(fileName, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary))
    return; UINT dwRead = 0;
    char* data = new char[MTU];
    while(dwRead < len)
    {
    memset(data,0,MTU);
    UINT dw = Receive(data,MTU);
    recvFile.Write(data, dw);
    dwRead+=dw;
    } recvFile.Close();
    delete[] data;

    CTCP_VCDlg* m_dlg =(CTCP_VCDlg*) AfxGetApp()->GetMainWnd();
    m_dlg->HandleReceive();

    CSocket::OnReceive(nErrorCode);
    }