摘要: ◆广播和多播只能由UDP传输协议实现,不支持TCP;◆广播只支持IPv4,不支持IPv6。而多播IPv4、IPv6都支持。所以IPv4的广播程序要移植到IPv6的环境下,要用多播实现由于TCP协议是端到端的协议,在通信之前,必须建立连接,三次握手之后才能发送数据。而广播是一对多的通信,所以TCP不支持广播。在局域网内,广播通常用来探测服务器。ser: 1 /*服务器广播*/ 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 10 #define PORT 234511 #d... 阅读全文
posted @ 2013-11-01 09:49 kaijia9 阅读(471) 评论(0) 推荐(0) 编辑
摘要: /********ntohl与htonl其实是一样的没有区别*********************/#include #include int main(){ char ip[] = "192.168.1.110"; int r1, r2, r3; r1 = inet_addr(ip); r2 = ntohl(r1); r3 = ntohl(r2); printf("a to n 0x%x\n", r1); printf("n to h 0x%x\n", r2); printf("n to h 0x%x\n", 阅读全文
posted @ 2013-10-29 19:28 kaijia9 阅读(1958) 评论(0) 推荐(0) 编辑
摘要: UDP传输模式是数据报,TCP传输模式为字节流,字节流与数据报区别在于有边界与无边界。例如:TCP客户端发送了三个数据包,开的缓存足够大服务端一次可接收三个数据包的数据,这就是无边界。UDP客户端发送了三个数据包,就算开的缓存足够大服务端一次也只能接收一个数据包,这就是有边界。还有就是协议会维护源地址和目的地址直到协议要求断开连接,这就决定了TCP不能进行广播和多播。如何使用TCP发送结构体类型数据:·//使用结构体转换成字符串发送,在服务器端直接转为结构体·/*·charsend_buf[1024]="tony2000";·mems 阅读全文
posted @ 2013-10-29 19:00 kaijia9 阅读(5972) 评论(0) 推荐(1) 编辑
摘要: /*************************************大端与小端:与大端存储格式相反,在小端存储格式中,低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节**************************************//*联合体union的存放顺序是所有成员都从低地址开始存放。*/请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1解答:int checkCPU( ){ { union w { int a; char b; } c; c.a = 1; return(c.b ==1); }} /**. 阅读全文
posted @ 2013-10-29 18:59 kaijia9 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 32位CPU则往四个字节凑。所以创建结构体等类型时要注意内存对齐的原则书写,以免编译器申请不必要的内存。typedef struct udp_data{ double d; 8 char a; 4 double b; 8} UDP_PACKET;typedef struct udp_data{ char d; 1 char a; 3 double b; 8} UDP_PACKET;typedef struct udp_data{ char d; 1 char a; 3 int b; 4} UDP_PACKET;typedef struct udp_data { double d; 8 char 阅读全文
posted @ 2013-10-29 18:55 kaijia9 阅读(652) 评论(0) 推荐(0) 编辑
摘要: 1.#include void Function(){ printf("Call Function!\n");}int main(){ void (*p)(); printf("p=%p &p=%p\n", p,&p); //p是一级指针,&p是二级指针// printf("(int *)&p=%p (int **)\n", (int *)&p);// *(int *)&p = (int)Function;// (*p)(); return 0;}打印结果:p=0x8048499 &am 阅读全文
posted @ 2013-10-05 00:37 kaijia9 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 1 #include "myhead.h" 2 #include "sem.h" 3 #include "socket.h" 4 #include "read_write.h" 5 #include "myhash.h" 6 7 #define ERROR_EXIT(m) (perror(m), exit(-1)) 8 9 int listenfd, localfd; 10 int connsockpair[2]; 11 int semid; 12 int ... 阅读全文
posted @ 2013-10-04 11:10 kaijia9 阅读(1174) 评论(0) 推荐(0) 编辑
摘要: 编写守护进程: 最关键的一步就是创建新的会话(Session), 要创建session,就不能是进程组组长; 通常当以一个用户名登入系统后,就相当于创建了一个会话,一个会话可以包括多个进程组.当一个子进程的父进程结束后,该子进程的父进程PPID就是1 init进程. 所以: 1. fork(), 创建子进程,并结束父进程 (摆脱进程组组长)子进程变成孤儿进程,所以1号进程就变成子进程父进程. 2. setsid(), 创建会话. 3. fork(), 再次创建子进程,守护进程虽然已经称为无终端的会话组长,但是它可能重新申请打开一个新的控制终端, 如果这个守... 阅读全文
posted @ 2013-03-20 10:34 kaijia9 阅读(197) 评论(0) 推荐(0) 编辑