Qt5与vs2017编码问题
编码格式有很多,常用的有utf-8, ansi, gb2312(936), gb18030等.
在WINDOWS上一般用936代码页,所以VS默认的编码格式一般为GB2312, 调试窗口也是这样,可以通过标题栏右键->默认属性,进行查看.
最近升级VS2010到VS2017, QT4->QT5.编码格式不同,所以进行了研究.
QT5, 使用UTF-8无BOM格式
VS2017使用GB2312格式,
两者之间的格式不同,所有需要转换,
可以在头文件中包括一句#pragma execution_character_set("utf-8")
这样出现的汉字都是UTF-8的,
转换用toLocal8bit()显示到控制台,不要用toStdSring()(先转UTF-8,所有不能正常显示);
TCP的两个滑动窗口
滑动窗口实现了TCP流控制。首先明确滑动窗口的范畴:TCP是双工的协议,会话的双方都可以同时接收和发送数据。TCP会话的双方都各自维护一个发送窗口和一个接收窗口。各自的接收窗口大小取决于应用、系统、硬件的限制(TCP传输速率不能大于应用的数据处理速率)。各自的发送窗口则要求取决于对端通告的接收窗口,要求相同。
滑动窗口解决的是流量控制的的问题,就是如果接收端和发送端对数据包的处理速度不同,如何让双方达成一致。接收端的缓存传输数据给应用层,但这个过程不一定是即时的,如果发送速度太快,会出现接收端数据overflow,流量控制解决的是这个问题。
对比滑动窗口和拥塞窗口
滑动窗口是控制接收以及同步数据范围的,通知发送端目前接收的数据范围,用于流量控制,接收端使用。拥塞窗口是控制发送速率的,避免发的过多,发送端使用。因为tcp是全双工,所以两边都有滑动窗口。 两个窗口的维护是独立的,滑动窗口主要由接收方反馈缓存情况来维护,拥塞窗口主要由发送方的拥塞控制算法检测出的网络拥塞程度来决定的。
拥塞窗口控制sender向connection传输数据的速率,使这个速率为网络拥堵状况的函数。
参考: