7530|17

50

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

WinCE下网络传输太慢,怎么办? [复制链接]

现在在PC机(xp)和PDA(WinCE5)之间建立TCP连接,采用CSocket类进行文件传输通讯,PDA端采用CESocket类。遇到一个很奇怪的问题,PDA向PC机发送文件(470k),大约需要1min的时间;而PC机向PDA发送文件(1.37M),只需要5秒左右。PDA采用的是ARMV4I的CPU。如故采用X86的PDA设备则速度无问题,大约10几秒,程序代码不变

请问问题出在哪里?与WinCE系统的定制有关?还是什么别的?
此帖出自WindowsCE论坛

最新回复

顶........................   详情 回复 发表于 2010-3-22 08:52
点赞 关注
 

回复
举报

85

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
PDA向PC机发送文件那么慢?我估计是你应用程序的事 给你个我的TCP发送程序 参考一下
//发送
void CTCPIPDlg::OnSend()
{
        // TODO: Add your control notification handler code here
                int nErrorCode;
        int cnt = 0, actlen = 0;

        if (m_Socket == NULL)
                return;

        UpdateData(TRUE);
        int sendlen = m_SendEdit.GetLength();                                 /* 取得输入字符串长度 */
        char *psendbuff = new char[sendlen];

        for(int i = 0; i < sendlen;i++)
                psendbuff = (char)m_SendEdit.GetAt(i);                 /* 转换为单字节字符 */
       
        while(cnt < sendlen)
        {
                actlen = send(m_Socket, psendbuff + cnt, sendlen - cnt, 0);
                if (actlen == SOCKET_ERROR )
                {
                        MessageBox(_T("TCP 数据发送失败!"));
                        nErrorCode = WSAGetLastError();
                        delete[] psendbuff;
                        return;
                }

                cnt = cnt + actlen;
                if (cnt < sendlen)
                        Sleep(1000);
        }
       
        delete[] psendbuff;
}
此帖出自WindowsCE论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
我也遇到同样问题,linux 下速度可以达到24Mbps, wince 5.0下只有8Mbps
此帖出自WindowsCE论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

4
 
To cfanlwn:
我传输的是图片,跟你写的思路完全一样。相同的源代码在CPU为X86系统的WinCE系统下传输速度却可以提高至少10倍,原因在哪里呢?
此帖出自WindowsCE论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

5
 
我也传过图片信息啊,也没有你说的那么慢啊,你可以把你代码贴出来看看
此帖出自WindowsCE论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

6
 
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;
        }
       
}
此帖出自WindowsCE论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

7
 
cfanlwn,源代码已在楼上贴出,请指教
此帖出自WindowsCE论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

8
 
帮顶一下
此帖出自WindowsCE论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

9
 
MTU是大于fLength ???开辟的存储空间是否足够?如果不够fLength 要分几次传输的
此帖出自WindowsCE论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(中级)

10
 
fLength=470k,MTU=8192 byte,是准备分成几次传输的,这样不行吗?可是,就算是分成几次传输,也不应该慢到470K的图片要传输1min吧?这速度感觉还不如串口呢....

如果系统定制中未加入winsock支持,会不会出现这种情况?还是跟系统缓存有关?或者应该怀疑socket通讯的延时问题(发送缓冲区填满后再发送)?
此帖出自WindowsCE论坛
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

11
 
fLength = 481078 byte具体值
此帖出自WindowsCE论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

12
 
自己顶一下
此帖出自WindowsCE论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 9 楼 pipiluloveyou 的回复:
fLength=470k,MTU=8192 byte,是准备分成几次传输的,这样不行吗?可是,就算是分成几次传输,也不应该慢到470K的图片要传输1min吧?这速度感觉还不如串口呢....

如果系统定制中未加入winsock支持,会不会出现这种情况?还是跟系统缓存有关?或者应该怀疑socket通讯的延时问题(发送缓冲区填满后再发送)?

可以分几次传输的,没有问题 我也是分好多次传输的,
winsock这个是在应用程序中要选择的 感觉不是这个的问题
系统缓存??也不是 他是立即就通过TCP/IP发出去了啊,没有在系统中保留啊  
此帖出自WindowsCE论坛
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

14
 
fLength=470k,MTU=8192 byte
fLength = 481280 byte具体值


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

for(int i=0;i {
while (dwRead < fLength)
{
//这里应该还有一句 要移动文件指针的,函数给忘了 明天查了在给你写上
UINT dw = transFile.Read(send, MTU);
m_psockClient.Send(send, dw);

dwRead += dw;

}
dwRead = 0;
}
transFile.Close();

delete []send;
}

}
此帖出自WindowsCE论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

15
 
CFile的Seek函数?我等着你的回复呀!
此帖出自WindowsCE论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

16
 

fLength=470k,MTU=8192 byte
fLength = 481280 byte具体值

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

for(int i=0;i {
while (dwRead < MTU)//每次发送MTU个
{
transFile.Seek(i*MTU,0);//移动文件指针
UINT dw = transFile.Read(send, MTU);
m_psockClient.Send(send, dw);

dwRead += dw;

}
dwRead = 0;
}
transFile.Close();

delete []send;
}

}
此帖出自WindowsCE论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

17
 
呵呵,问题解决了。程序没变,只是自己重新做了个BSP、SDK包,就好了。
应该是开发包的问题。
CFile.Read会自动移动文件的当前指针。
还是谢谢大家
此帖出自WindowsCE论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

18
 
顶........................
此帖出自WindowsCE论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表