吐血。
C/S 模型,S 完全所有的数据处理,C 仅显示数据。
所以,C中不存在 数据连接情况。 类似的还有 B/S 结构。
好吧,我写个流程出来。
客户端
启动,连接服务器,如连接失败,提示,退出。
登录,确定后,加密,然后发给服务器验证。若服务器验证失败次数超过,退出。
服务器验证成功,生成一个加密KEY,建议 8个 或 16个字节,甚至更加的附加数据 。发给客户端。
客户端操作,查表和更新数据,删除数据,针对 这几种情况分别定义结构体和发送函数。
结构体可以使用定长数据,处理更简单。也可以使用变长数据,更不容易被解密。还可以使用符号分隔的数据。
客户端每一步操作,都转换成相应的结构体,然后按字节流发给服务器端,服务器端解析后,针对这个进行处理,生成结构体发给客户端。
按分隔符定义结构体
1、结构体定义
ID as byte
'序号,流水号,凡流水号未连接的情况下,当作正在破解,服务端中断连接。以整数保存或以数字保存,示例里以 数字保存可以看到整数
KEY as string * 16
'标识符
TEXT as string
'内容
加密,最简单的方法,用标识符与内容进行 XOR 。
如登录封包(手打,未对内容进行加密。
#1LOGLOGLOGLOGLOGLSelect * where name='sa' and pass='abc';#
这个封包里,
#,封包头和封包尾。
1
流水号
LOGLOGLOGLOGLOGL
登录命令符,这个是固定
Select * where name='sa' and pass='abc';
查询命令,当服务器收到这条命令后,就会去查表,然后返回结果。如果固定的情况下,这条命令也可以使用自定义格式。
如
sa$ +
MD5(sa$abc) 两段组成。服务器查询 sa 的密码,然后再 MD5 加密运算,与后面这部分比较,如果相同,返回真,如果不同,返回假。
如登陆成功,服务器返回的封包可以这样的。
#1KEYKEYKEYKEYKEYKABCDEFGHIJKL#
1 对应流水号,如果流水号不对,中断连接。
KEYKEYKEYKEYKEYK
返回给客户端的,说明这个是KEY,按前面的要求,16位
ABCDEFGHIJKL1234
告诉客户端,以后使用这个KEY通迅,而不再使用固定的KEY了。
如客户端要求查 A1 表。第二页,每页15条记录。
#2ABCDEFGHIJKL1234select * from A1;$2$15#
2
流水号
ABCDEFGHIJKL1234
客户端的加密KEY
select * from A1;$2$15
这段需要加密,这里是示例不加了。
查询表命令,以$表示后面有几个参数,如,第1个:第几页;第2个:每页几条记录;第3个:.... ,这个你自己规定。
服务器端返回。如这个表有二个字段,分别是 T1,T2,如
#2ABCDEFGHIJKL1234T1^T2$A1^B1$A2^B2$.....#
2
流水号
ABCDEFGHIJKL1234
KEY
T1^T2$A1^B1$A2^B2$.....
数据
T1^T2
字段标题 列表。这里有二个字段,可以拆出二个来。
A1^B1
第一条记录的数据,也可以拆出二个来的。
。。。。。
重点:
想个好的封包模式,实在想不出,就使用 B/S 模式 也是不错的。
要求:1、安全性。确保任何密码不能在网络上传传输,需要传的时候一定要使用不可逆加密。
数据,都要使用 可逆加密 进行加密,可以使用公开算法,也可以使用你自定义的加密。加密用的KEY,可以固定的,也可以每次连接协商。
2、数据流的简洁化。不要过多的增加数据。如要求1条记录,那么只传1条记录,而不管具体有多少条记录。整体查询时,使用分页进行传输。
---------------------------------------------------------
以前是根据以前的经验,临时写的,如有不对之处,请略过。
现在基本上没时间去写代码了。