结构体struct tcp_sock中有很多成员数据跟滑动窗口协议相关,需要注意的是这里讲的滑动窗口都是指本地socket的接收窗口。
成员window_clamp表示滑动窗口的最大值,滑动窗口的大小在变化的过程中不能超出这个值。它在TCP连接建立的时候被初始化,被置为最大的16位整数左移窗口的扩大因子,因为滑动窗口在TCP首部中以16位表示,window_clamp太大会导致滑动窗口不能在TCP首部中表示。
成员rx_opt是一个struct tcp_options_received结构体,它有两个成员snd_wscale和rcv_wscale,分别表示来自对端通告的滑动窗口扩大因子(本地发送数据报时需要遵守),和本地接收滑动窗口的扩大因子。snd_wscale从来自对端的第一个SYN中获取。rcv_wscale在本地socket建立连接时初始化,它赋值的原则是使16位整数的最大值左移rcv_wscale后,至少可以达到整个接收缓存的最大值。接收缓存最大值在协议栈中由全局变量mysysctl_rmem_max表示,它是256*(256+sizeof(struct sk_buff))后的值,为107520,但sysctl_tcp_rmem[3]所表示的接收缓存的上限更大,为174760,所以,取后者,这样的话,rcv_wscale的值几乎可以说是固定的,为2。所以window_clamp的值就是 65535 <<2 = 262140。可见,window_clamp的值超出了接收缓存的最大值,但这没有关系,因为在滑动窗口增长的时候,会考虑接收缓存的大小这个因素的。
rcv_wnd表示当前的接收窗口的大小,这个值在接收到来自对端的数据后,会变动的。它的初始值取接收缓存大小的3/4跟MAX_TCP_WINDOW之间的最小值,MAX_TCP_WINDOW在系统中的定义为32767U。然后,还要根据mss的值作一个调整,调整逻辑是:如果mss大于3*1460,则如果当前的rcv_wnd大于两倍的mss,就取两倍的mss作为rcv_wnd的值;如果mss大于1460,则如果当前的rcv_wnd大于3倍的mss,就取3倍的mss作为rcv_wnd的新值;否则,如果rcv_wnd大于4倍的mss,就取4倍的mss作为rcv_wnd的新值,我们的实验环境的mss值为1448(因为tcp首部有12字节的时间戳选项),所以rcv_wnd最后被调整为1448*4=5792。
OriginOS Ocean系统开启小窗模式方法:方法一、侧滑呼出小窗应用列表
全屏手势下,侧滑并停顿可呼出小窗应用列表,呼出后滑动到需使用应用即可打开小窗(侧滑设置路径:设置--系统导航--快速启动应用小窗,开启开关);
方法二、应用内滑启动小窗
在应用内,从屏幕左下角(靠近侧边位置)向内滑动即可打开小窗(开启方法:进入设置--快捷与辅助--多任务--手动启动小窗--打开“左下角内滑启动小窗”);
方法三、应用库启动小窗
抽屉风格桌面上滑呼出应用库,长按并拖动支持小窗的应用图标;
方法四、近期应用启动小窗
调出近期应用界面,点击软件名称后的“▼”图标选择”小窗“即可开启;(部分系统软件不支持开启小窗)
方法五、悬浮消息启动小窗
看视频时,社交应用的消息通知显示为悬浮消息,可自定义设置展开方式(小窗展开/分屏展开);
方法六、游戏侧边栏启动小窗
玩游戏时,可以点击游戏魔盒侧边栏“系统小窗”按钮、三指上滑或在控制中心点击“分屏”启动游戏画中画;
方法七、分屏后启动小窗
将软件分屏后,按住分屏应用顶部“▁▁”指示条,然后将分屏应用窗口拖动至屏幕中间位置,即可将应用切换为小窗形态。
打开VS2008或者2005.新建一个“windows窗体应用程序”,默认情况下有一个窗体Form1,从左边工具箱拖动一个button放入窗体Form1,双击窗体Form1,进入Form1.cs文件,在private void Form1_Load(object sender, EventArgs e){}方法里初始化变量count;就是int count = 0;然后切换到Form1设计。。双击刚才托上去的BUTTON,然后又会进入到Form1.cs代码页面,在 private void button1_Click(object sender, EventArgs e){}方法里写上代码
count++//每点击一次计数加
button1.Text = count.ToString()//类型转换
按Ctrl+F5运行!
vs已经封装好你需要的 *** 作。button的属性,在右下角可以修改。不需要知道源文件在哪里的。。。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)