一、建立连接
1、使用系统的socket函数建立一个socket
2、使用这个socket初始化一个vio对象
net->vio= vio_new(sock, VIO_TYPE_TCPIP, VIO_BUFFERED_READ);
3、对这个socket执行connect操作,连接到远程主机
4、使用vio初始化net对象
my_net_init(net, net->vio)
并设置为keep alive
vio_keepalive(net->vio,TRUE);
二、第一次交换
客户端执行recv,会收到一个来自server的包,其中第一个字节是协议的版本号。
其它的重要信息还有connection id、scramble
41 00 00 00
0A 35 2E 30 2E 32 30 2D 73 74 61 6E 64 61 72 64 2D 6C 6F 67 00 44 8E 4E 00 5A 66 72 2A 79 43 24 27 00 2C A2 08 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 36 7B 29 58 5E 50 56 41 21 7C 73 4C 00
其格式如下:
1 协议的版本号 (0×0A)
n (Null-Terminated String) 服务器版本
4 thread_id
8 scramble_buff
1 (填充) 永远是 0×00
2 server_capabilities
1 server_language
2 server_status
13 (填充) 永远是 0×00 …
13 scramble_buff剩余的部分 (4.1)
三、然后客户端将密码等发送过去
客户端根据服务器发给的scramble加密,并存放在scramble_buff中发给服务器
发送登录数据:
00000000 3A 00 00 01 85 A6 03 00 00 00 00 01 08 00 00 00
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000020 00 00 00 00 72 6F 6F 74 00 14 00 00 00 00 00 00
00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Bytes Name
—– —-
4 client_flags