4018|5

83

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于在WinCE5.0中是使用WinSock2.2中,能否设置发送Send函数不使用延时的问题 [复制链接]

关于在WinCE5.0中是使用WinSock2.2中,能否设置发送Send函数不使用延时的问题:

TCP协议将数据缓存起来直到足够多时一次发送,以避免发送过小的数据包而浪费网络资源。虽然这个功能有利于网络,但应用程序可能对所造成的缓冲延迟不能容忍。

网上说可以人为禁用缓存功能:使用Socket.NoDelay 属性,这个属性在 .NET Framework 2.0 版中是新增的,

http://book.51cto.com/art/200902/109694.htm

http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socket.nodelay(VS.80).aspx


但是俺在2440上的SDK是 .NET Framework 1.0的,用的WinSock2.2协议,是不知道在这个的编程环境下该函数能否使用?怎么具体使用?




最新回复

帮你顶一下  详情 回复 发表于 2009-10-23 16:25
点赞 关注

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
不是很清楚,帮顶下!
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
http://blog.eeworld.net/lin49940/archive/2009/07/26/4382303.aspx
中说:
5.1 TCP_NODELAY 选项

设置该选项: public void setTcpNoDelay(boolean on) throws SocketException
读取该选项: public boolean getTcpNoDelay() throws SocketException
     默认情况下, 发送数据采用Negale 算法. Negale 算法是指发送方发送的数据不会立即发出, 而是先放在缓冲区, 等缓存区满了再发出. 发送完一批数据后, 会等待接收方对这批数据的回应, 然后再发送下一批数据. Negale 算法适用于发送方需要发送大批量数据, 并且接收方会及时作出回应的场合, 这种算法通过减少传输数据的次数来提高通信效率.

     如果发送方持续地发送小批量的数据, 并且接收方不一定会立即发送响应数据, 那么Negale 算法会使发送方运行很慢. 对于GUI 程序, 如网络游戏程序(服务器需要实时跟踪客户端鼠标的移动), 这个问题尤其突出. 客户端鼠标位置改动的信息需要实时发送到服务器上, 由于Negale 算法采用缓冲, 大大减低了实时响应速度, 导致客户程序运行很慢.

      TCP_NODELAY 的默认值为 false, 表示采用 Negale 算法. 如果调用setTcpNoDelay(true)方法, 就会关闭 Socket的缓冲, 确保数据及时发送:

       if(!socket.getTcpNoDelay()) socket.setTcpNoDelay(true);                                                                                    

      如果Socket 的底层实现不支持TCP_NODELAY 选项, 那么getTcpNoDelay() 和 setTcpNoDelay 方法会抛出 SocketException.


http://www.dqhxz.com/post_146.html
中说:
2、SOCKET的SegMentSize和收发缓冲

  TCPSegMentSize是发送接受时单个数据报的最大长度,系统默认为1460,收发缓冲大小为8192。

  在SOCK_STREAM方式下,如果单次发送数据超过1460,系统将分成多个数据报传送,在对方接受到的将是一个数据流,应用程序需要增加断帧的判断。当然可以采用修改注册表的方式改变1460的大小,但MicrcoSoft认为1460是最佳效率的参数,不建议修改。

  在工控系统中,建议关闭Nagle算法,每次发送数据小于1460个字节(推荐1400),这样每次发送的是一个完整的数据报,减少对方对数据流的断帧处理。


那具体的这个socket.setTcpNoDelay()函数或是Socket.NoDelay 属性怎么使用?
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

4
 
还是在这个网站:http://www.dqhxz.com/post_146.html

1、快速通信

  Winsock的Nagle算法将降低小数据报的发送速度,而系统默认是使用Nagle算法,使用

int setsockopt(

SOCKET s,

int level,

int optname,

const char FAR *optval,

int optlen

);函数关闭它

  例子:

SOCKET sConnect;

sConnect=::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

int bNodelay = 1;

int err;

err = setsockopt(

sConnect,

IPPROTO_TCP,

TCP_NODELAY,

(char *)&bNodelay,

sizoeof(bNodelay));//不采用延时算法

if (err != NO_ERROR)

TRACE ("setsockopt failed for some reason\n");;
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

5
 
大家有没有测试过,在400MHz主频下,应用程序运行的速度是多少(在应用程序中使用个死循环来对LED闪烁,也就是对IO口来回置高和置低,外部用示波器测量)

俺们测了一下,只有300HZ这样,都没有接近对SDRAM操作时钟的66MHz...!!!

不解中...
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

6
 
帮你顶一下
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表