none
WinCE 中sendto()函数的实现细节,能给讲解一下么? 先生请 RRS feed

  • 问题

  •  

    我在WinCE中用sendto()函数发送数据到网卡DM9000,发现实际的速度总是不过10Mb/s,想了解一下sendto()这个函数在底层的实现细节,看看能不能提高我的网络传输速度!

    有哪位先生能帮忙分析一下呢?谢谢

    2008年3月7日 1:14

答案

  • 网口不像串口可以独享带宽,此外网络数据包还包括IP头,TCP头,TCP协议还需要对方ASK应答确认,如果不禁用Nagle算法,在发送的数据包最小的时候,还需要等200ms才能发送。

    这是我做Wince网络通信程序的测试数据,你可以参考一下
    1、100Mb PC机对发       最高11.28 MByte (接收最大包8192)      90%
    2、PC向触摸屏发  10Mb   最高1.02  MByte  (接收最大包38668)    81.6%
    3、触摸屏向PC发  10Mb   最高0.69  MByte  (接收最大包8192)     55.2%
    4、PC向触摸屏发  100Mb  最高2.07  MByte  (接收最大包38668)    17.25%
    5、触摸屏向PC发  100Mb  最高0.65  MByte  (接收最大包8192)     4.3%

    2008年3月13日 6:40
    版主

全部回复

  • 你目前的问题是发送速度慢。我觉得这个和WinCE提供的API没有太大关系。当然,应用程序的编写可能也会影响传输速度。你最好先用WinCE提供的CETK测一下你的网卡驱动,测一下它的Throughput,如果测出来的发送/接收速度确实慢,那可能是你的网卡驱动有问题。如果测出来的速度和你的读写速度差别很大,那可能是你的应用程序实现的问题,你可以读一下CETK的源代码,看看它是怎么发送数据的。

     

    如果你觉得CETK比较麻烦,那你可以用WinCE自带的FTP,在WinCE中选择FTP Server,然后重新编译。WinCE启动以后,通过FTP登录,然后传文件,看看速度如何。

     

    我觉得你目前还是先确认问题出在什么地方比较好。

     

     

    2008年3月7日 2:07
  • 谢谢你的回复,

    我曾经用ftp侧过,速度是一样的(慢),所以,我想直接调用底层的函数进行传输数据是否可以改善网速!

    我可以问一下,你目前使用过的网速(WinCE)最高能达到的程度么?我好有个心理准备

    2008年3月7日 3:19
  • 不同的平台可能不太一样,而且跟你的处理器的频率也有关系,差别可能会比较大。我在WinCE上用FTP感觉速度还可以,具体没有测过。

     

    2008年3月7日 5:33
  •  

    thank U all the same!
    2008年3月7日 6:12
  • 网口不像串口可以独享带宽,此外网络数据包还包括IP头,TCP头,TCP协议还需要对方ASK应答确认,如果不禁用Nagle算法,在发送的数据包最小的时候,还需要等200ms才能发送。

    这是我做Wince网络通信程序的测试数据,你可以参考一下
    1、100Mb PC机对发       最高11.28 MByte (接收最大包8192)      90%
    2、PC向触摸屏发  10Mb   最高1.02  MByte  (接收最大包38668)    81.6%
    3、触摸屏向PC发  10Mb   最高0.69  MByte  (接收最大包8192)     55.2%
    4、PC向触摸屏发  100Mb  最高2.07  MByte  (接收最大包38668)    17.25%
    5、触摸屏向PC发  100Mb  最高0.65  MByte  (接收最大包8192)     4.3%

    2008年3月13日 6:40
    版主