|
2精币
本帖最后由 免费网管 于 2011-7-11 04:15 编辑
下面是软件的多用户部分,软件编译运行后,10个以下用户连接上来,每半小时左右就会退出一次,要是超过10个用户连接,软件几分钟就会退一次,请大家帮我看看哪里写错了。
.版本 2
.支持库 EThread
.支持库 sock
.支持库 spec
.支持库 mysql
.程序集 多用户控制权
.子程序 多用户控制
.局部变量 监听控制, 整数型
.局部变量 新用户句柄, 整数型
.局部变量 用户进入锁, 整数型
监听控制 = 1
用户进入锁 = 创建进入许可证 ()
.如果 (服务器.启动 (到整数 (读配置项 (取运行目录 () + “\my.INI”, “my”, “my”, ))))
.判断循环首 (监听控制 = 1)
新用户句柄 = 服务器.监听 (0)
进入许可区 (用户进入锁)
启动线程 (&单一接收线程, 新用户句柄, )
退出许可区 (用户进入锁)
延迟 (50)
.判断循环尾 ()
.否则
.如果结束
.子程序 单一接收线程
.参数 新用户句柄, 整数型
.局部变量 退出标志, 整数型
.局部变量 用户信息, 用户信息
.局部变量 数据, 字节集
.局部变量 句柄, 整数型
.局部变量 记录集句柄, 整数型
.局部变量 用户进入锁, 整数型
' 用户进入锁 = 创建进入许可证 ()
' 进入许可区 (用户进入锁)
退出标志 = 1
用户信息 = 用户身份验证 (新用户句柄)
执行SQL语句 (句柄, “select * from IPBlackList where IP地址='” + 用户信息.用户IP + “'”)
记录集句柄 = 取记录集 (句柄)
.如果真 (记录集句柄 = 0)
.判断循环首 (退出标志 = 1)
数据 = 服务器.接收 (新用户句柄, 0, )
.如果 (取字节集长度 (数据) ≤ 0)
删除用户 (用户信息)
退出标志 = 0
跳出循环 ()
.否则
收到客户端数据 (用户信息, 数据)
.如果结束
.判断循环尾 ()
' 退出许可区 (用户进入锁)
.如果真结束
.子程序 服务器节点回应
.判断开始 (数据报.配置 (到整数 (读配置项 (取运行目录 () + “\my.INI”, “my”, “my”, ))))
启动线程 (&接收子程序, , )
.默认
延时 (5000)
结束 ()
.判断结束
.子程序 接收子程序
.局部变量 对方信息, 对方信息
.局部变量 数据, 字节集
.局部变量 xkz
xkz = 创建进入许可证 ()
进入许可区 (xkz)
数据 = 数据报.接收 (0, 对方信息, )
.如果真 (到文本 (数据) ≠ “”) ' 代表收到新的消息
数据报_数据到达 (对方信息, 数据)
退出许可区 (xkz)
.如果真结束
接收子程序 ()
.子程序 数据报_数据到达
.参数 对方信息, 对方信息
.参数 数据, 字节集
.局部变量 ID, 字节集
.局部变量 数据长度, 整数型
.如果真 (取字节集左边 (数据, 18) = { 18, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 20, 0, 0, 0, 20 })
数据报.发送 (对方信息, 数据, 0)
.如果真结束
.子程序 在线信息发送器
.局部变量 新用户句柄, 整数型
.局部变量 监听控制, 整数型
.如果 (在线信息服务.启动 (83617))
监听控制 = 1
.判断循环首 (监听控制 = 1)
新用户句柄 = 在线信息服务.监听 (0)
启动线程 (&单一接收线程X, 新用户句柄, )
.判断循环尾 ()
.否则
.如果结束
.子程序 单一接收线程X
.参数 新用户句柄, 整数型
.局部变量 退出标志, 整数型
.局部变量 数据, 字节集
.局部变量 xkz, 整数型
退出标志 = 1
xkz = 创建进入许可证 ()
进入许可区 (xkz)
.判断循环首 (退出标志 = 1)
数据 = 在线信息服务.接收 (新用户句柄, 0, )
.如果 (取字节集长度 (数据) ≤ 0)
退出标志 = 0
.否则
.如果真 (到文本 (数据) = “客户端连接信息”)
在线信息服务.发送 (新用户句柄, “88888”, 0)
.如果真结束
.如果结束
.判断循环尾 ()
退出许可区 (xkz)
|
|