1.传输数据用结构体封装,自己定义协议,可以解决粘包问题。
2.用tcp传输数据时,发送send(),定义发送的大小时,strlen之后,tcp会自己加上协议,会接受到乱码,应该用sizeof,然后每次发送时,都发送这次传输的数据长度
3.从键盘输入使用scanf接受时,每次都要用getchar()来吃回车,不然缓冲区中会有数据,下次的scanf会读取到垃圾字符
4.程序执行多次,或没接收到想要的数据,多半是缓冲区内有数据,可以用先定义一个很大的数组,然后recv,把缓冲区内的数据吃了,通过返回值来判断吃到了多少,再去找是哪里的数据发多了
5.结构体用于发送接受,两边的成员变量的顺序要是一样的,以结构体为单位发送接受,赋值时是按成员顺序接受的,两边结构体的成员顺序不一样,接受到的数据就会错开。
6.封装函数,需要注意结构,发送与接受要在同一一个层次。
7.数据库的使用,增删改调用sqlite3_exec函数就可以了,sql语句的改变使用sprintf来拼接,查找比较难,sqlite3_get_table函数可以看成有四个返回值,查询结果的行数,列数,查询结果的首地址,和错误号。没查询到时,行数为0,列数为表头的列数,resultp的首地址指向表头
8.epoll实现的I\O多路复用,原理上是单通道分时间片的通 讯,不能同时接受两个进程发送的数据,只能一个数据处理完才能处理另外一个数据。
9.全局变量初始化只能为常量,赋值,修改在函数内部进行。