摘要:
1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资... 阅读全文
摘要:
1. TCP连接当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的经典的三次握手示意图:经典的四次握手关闭图:2. TCP短连接我们模拟一下TCP短连接的情况,client向server发起连接请求,server接到请求,然后双方建立连接。client向server发送消息,server回应client,然后一次读写就完成了,这时候双方任何一个都可以发起close操作,不过一般都是cli 阅读全文
摘要:
volatile的作用: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值. 简单地说就是防止编译器对代码进行优化.比如如下程序: XBYTE[2]=0x55; XBYTE[2]=0x56; XBYTE[2]=0x57; XBYTE[2]=0x58; 如果对外部硬件上述四条语句分别表示不同的操作,会产生四种不同的动作,那么编译器就不能像对待纯粹的程序那样对上述四条语句进行优化只认为XBYTE[2]=0x58;而忽略前三条语句(即只产生一条机器代码),此时编译器会逐一的进行编译并产生相应的机器代码(四条).volatile一般使用的地方 一般说来,volat... 阅读全文
摘要:
关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++ 的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。下面对它们一一进行介绍。static_cast用法:static_cast < type-id > ( expression )该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。 阅读全文
摘要:
#include <iostream>using namespace std;typedef struct _A{char c;int i;} A;typedef struct _B{A a;double d;} B;typedef struct _C{A a;char c;} C;int main(void){cout << sizeof(A) << endl;cout << sizeof(B) << endl;cout << sizeof(C) << endl;return 0;}816 12 阅读全文
摘要:
#include <stdio.h>#include <string.h>#include <stdarg.h>#include <iostream>using namespace std;//函数原型声明,至少需要一个确定的参数,注意括号内的省略号int demo(char *msg, ...){va_list argp; // 定义保存函数参数的结构int argno = 0; // 纪录参数个数char *para; //存放取出的字符串参数va_start(argp, msg);while (1){para = va_arg( argp, 阅读全文
摘要:
#include <iostream>using namespace std;struct A{A(){std::cout << "A";}};struct B: public A{B(){std::cout << "B";}};struct C{C(){std::cout << "C";}B b;A a;};int main(){C c;return 0;}ABAC 阅读全文