NetCom7 Chat Demo中OnHandleCommand事件代码实现及参数咨询
NetCom7 TncServerSource.OnHandleCommand 实现说明
事件参数明细
NetCom7的TncServerSource.OnHandleCommand事件参数是固定的,你可以通过Delphi自动生成事件框架直接获取,各参数含义如下:
Sender: TObject:触发事件的TncServerSource实例(也就是你的Server组件)aContext: TncContext:当前客户端的连接上下文,可获取客户端IP、会话ID、自定义会话数据等信息aCmd: Integer:客户端发送的命令标识,对应你要处理的业务指令aData: TBytes:客户端随命令传来的附加数据(字节数组格式)var Result: TBytes:需要你赋值的返回结果,最终会回传给发起命令的客户端
完整代码实现示例
在ufrmMain.pas中添加事件处理函数,示例如下:
procedure TfrmMain.ServerHandleCommand(Sender: TObject; aContext: TncContext; aCmd: Integer; aData: TBytes; var Result: TBytes); var Response: string; ClientIP: string; begin // 获取客户端IP,用于日志或业务逻辑 ClientIP := aContext.Connection.PeerIP; // 根据命令码分支处理业务 case aCmd of // 示例:处理"登录验证"命令(假设命令码为10) 10: begin // 将客户端传来的字节数组转为UTF8字符串 var LoginInfo := TEncoding.UTF8.GetString(aData); // 这里编写登录验证逻辑,比如解析账号密码 if LoginInfo = 'admin:123456' then Response := '登录成功' else Response := '账号或密码错误'; // 将响应转为字节数组赋值给Result Result := TEncoding.UTF8.GetBytes(Response); end; // 示例:处理"广播消息"命令(假设命令码为20) 20: begin // 把消息广播给所有在线客户端 (Sender as TncServerSource).Broadcast(20, aData); // 返回广播成功的响应 Result := TEncoding.UTF8.GetBytes('消息已广播'); end; // 处理未知命令 else Response := Format('未知命令:%d,来自IP:%s', [aCmd, ClientIP]); Result := TEncoding.UTF8.GetBytes(Response); end; end;
绑定事件的两种方式
- 设计器绑定:在Delphi设计器中选中
Server组件,打开Object Inspector的Events标签,找到OnHandleCommand,下拉选择你编写的ServerHandleCommand方法即可。 - 代码手动绑定:在窗体的
OnCreate事件中添加绑定代码:
procedure TfrmMain.FormCreate(Sender: TObject); begin Server.OnHandleCommand := ServerHandleCommand; end;
注意事项
- 字符串与
TBytes转换时要统一编码,推荐用UTF8避免乱码 - 如果不需要返回数据,直接给
Result赋值空数组:Result := []; aContext是区分不同客户端的关键,可通过aContext.Data存储客户端自定义会话状态
内容的提问来源于stack exchange,提问作者Gregor Marston
相关产品推荐
相关产品推荐

