发布时间:2013-01-09 17:27:22
一、UDP的connect函数,并不进行3次握手机制,而仅仅是指定了目的ip和port而已。对于已经connect过的套接口 (1)不能再使用sendto或recvfrom函数,因为connect已经指定ip和port,所以只能用write和read函数。 (2)UDP中,connect可以多次使用,也可以断开connect后重新指定ip和port。。设置地址族为AF_UNSPEC,再调用 connect,则可以断开此接口。 实际上,sendto的操作即是循环 连接套接口,输出数据,关闭套接口 这3个动作的。 (3)一个socket只能connect一个目的主机。仅在进程用......【阅读全文】
发布时间:2013-01-08 23:44:33
如果直接操作结构体成员是不会取到不期望的值 但是对于要求连续数据格式的时候需要考虑对齐的问题 例如通讯中的数据帧格式等 ,如 ip数据包等#pragma pack(1) struct tagStruct { ... } t; #pragma pack() 的方式来强制连续存放 其中前面 pack(1) 是指对齐边界为 11。几个结构体例子:struct{short a1;short a2;short a3;}A;struct{long a1;short a2;}B;sizeof( ......【阅读全文】
发布时间:2013-01-07 23:46:59
第一部分:宏为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。而宏只是在预处理的地方把代码展开,不需要额外的空间和时间方面的开销,所以调用一个宏比调用一个函数更有效率。但是宏也有很多的不尽人意的地方。1、宏不能访问对象的私有成员。2、宏的定义很容易产生二意性。我们举个例子:#define square(x) (x*x)我们用一个数字去调......【阅读全文】