网络编程紧急求助!!!有些难度:-( 在线等... (127分)

  • 主题发起人 主题发起人 loster2003
  • 开始时间 开始时间
L

loster2003

Unregistered / Unconfirmed
GUEST, unregistred user!
我公司的客户端程序通过TCP方式连接其它公司的服务器程序,对方采取IP地址认证的方式来对客户端进行认证。
我想开发一个类似代理服务器的程序,模拟对方的客户端程序连接上对方服务器(该部分已经实现)。该代理服务器程序使用了Indy的TCPClient控件,连接后同时使用TCPServer控件在一个固定的端口监听,接受客户端程序的请求。收到客户端程序的请求后,进行排队处理,将请求通过TCPClient发送给对方服务器,收到结果后再通过TCPServer控件返回给客户端。其实类似一个放大器程序,将以前的一个IP地址上的应用可扩展到多台电脑上使用。

现在的问题是:
1、对方现在提供了3个IP地址,我可以在一台电脑上绑定这3个IP,并在TCPClient控件的BoundIP属性内设定IP,这样便可通过对方的认证。可是在程序内我是否也要相应使用3个TCPClient控件呢?如果以后增加了IP地址(几十个),岂非也要增加控件?还是动态创建控件?

2、客户端程序的请求如何动态使用这几个连接进行发送?如何判断哪个连接正空闲,对请求进行排队处理?

真的很头疼,也就剩下这点分了,全部拿出来。希望哪位DFW能告知答案,哪怕是个思路都行。

多谢!
 
创建线程,3个IP创建3个线程,线程中动态创建TIdTCPClient,每个线程只处理自己的数据。indy的demo有完整代码。
 
是指indy的那个chat的demo吗?我看了,有些不大懂,它的例子是管理客户端的thread的。你的意思是不是说我连接对方的服务器时动态创建TIdTCPClient?然后通过ThreadID来管理?
这方面的编程经验不足,能不能简单写个demo给我看一下?
 
constructor TClientHandleThread.Create();
begin
FIdTCPClient:=TIdTCPClient.Create(nil);
FreeOnTerminate := false;
end;
procedure TClientHandleThread.Execute;
begin
用FIdTCPClient处理数据
end;
destructor TClientHandleThread.Destroy;
begin
FIdTCPClient.free;
inherited;
end;
创建1个处理线程
GClientTd:=TClientHandleThread.Create();
GClientTd.Priority := tpHighest;
GClientTd.Resume;//启动线程
 
你要自己维护请求Client和返回的数据Client或者数据的匹配关系.

-- 外部的 Server -
Client
|
--- YourServer ---- 实际的Client1,2,3,...,
|
在建立连接后,读取请求并转发(通过和自己服务器的和外部的连接)给外部Server 等待返回结果再将结果发回Client
YourServer :
ListenThread : 一个监听的Socket 管理类.
OutThread : 和外部连接的Socket 管理类
Task:Tlist;
InnerClient:Tlist; (add Socket,CLientID )

在连接建立时保存 CLientID 然后转发请求并等待数据返回.如果有数据直接返回给Client

 
算了,看样子人还是要靠自己的:-)
 
多人接受答案了。
 
大家只能说说思路,没有时间写代码啊!
 
多谢itren 和 cash95 两位的意见
 
后退
顶部