哪位大哥能用Idtcpserver and idtcpclient 写个端口转发=端口映射=数据转发

无栈程序猿 2009-02-03 04:45:19
哪位大哥能用Idtcpserver and idtcpclient 写个端口转发=端口映射=数据转发

我在网络上搜了好久了也没找到啊 我不想用indy自带的那个转发控件 我想转发的同时数据加密
...全文
108 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
酱油哥来的 2011-10-26
  • 打赏
  • 举报
回复
谢谢。我也来看看!
僵哥 2009-02-03
  • 打赏
  • 举报
回复
如果要要自行处理,那就通过OnExecute事件(客户端发送来数据时触发),对AContext(TIdContext,实际应该是:TIdMappedPortContext)当中的数据FNetData做加工;OnOutboundData事件则是从远端传回的数据,处理方法是一样的.
僵哥 2009-02-03
  • 打赏
  • 举报
回复
使用TIdTCPPortMapper,然后从中做处理.
僵哥 2009-02-03
  • 打赏
  • 举报
回复
TIdTCPPortMapper
JohnTao2009 2009-02-03
  • 打赏
  • 举报
回复
太厉害了。。。 正是我需要的 谢谢啦
僵哥 2009-02-03
  • 打赏
  • 举报
回复

type
TMySuperMappedPortContext = Class(TIdMappedPortContext)
public
procedure DoEncode;
procedure DoDecode;
End;


implementation

{自定义加密函数}
function EncodeData(Src: String): String;
begin
Result := Src;
end;

{自定义解密函数}
function DecodeData(Src: String): String;
begin
Result := Src;
end;


{自定义加密接口}
procedure TMySuperMappedPortContext.DoEncode;
begin
FNetData := EncodeData(FNetData);
end;

{自定义解密接口}
procedure TMySuperMappedPortContext.DoDecode;
begin
FNetData := DecodeData(FNetData);
end;


{OnBeforeListenerRun事件}
{替换相应的映射消息处理类型}
procedure TForm1.IdMappedPortTCP1BeforeListenerRun(AThread: TIdThread);
begin
IdMappedPortTCP1.ContextClass := TMySuperMappedPortContext;
end;

{OnExecute事件}
{接收到须转发的数据,调用DoEncode进行"加密"}
procedure TForm1.IdMappedPortTCP1Execute(AContext: TIdContext);
begin
if AContext is TMySuperMappedPortContext then begin
TMySuperMappedPortContext(AContext).DoEncode;
end;
end;

{OnOutboundData事件}
{接收到须转发的数据,调用DoDecode进行"解密"}
procedure TForm1.IdMappedPortTCP1OutboundData(AContext: TIdContext);
begin
if AContext is TMySuperMappedPortContext then begin
TMySuperMappedPortContext(AContext).DoDecode;
end;
end;

无栈程序猿 2009-02-03
  • 打赏
  • 举报
回复
OnExecute 我接收到数据了 但是数据好像被拦截 不能转发了。这方面的资料真的太难找了
可以简单写个例子么?发给我么?我的邮箱: 7956214@qq.com

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧