用的indytcpserver和indytcpclient来进行网络通信,程序需要主动连接到别的机器,也需要接收别的机器的连接,所以我在一个unite里同时用了这两个控件。但是在设置了server的port之后,(例如设成5000)再设置client的port的时候(例如设置成5001)就会出错了。这个怎么处理?
目前我的需求是:server需要一个端口来侦听,client需要一个端口来连接上别的server,两个用不同的端口(当然如果能用同一个端口更好)另外:有一个公网固定ip的server,如果连接它的client里有通过代理服务器上internet的,其他client怎么连接到这个client?
静候高手指点。有实例更好
[email protected]
先谢谢了
目前我的需求是:server需要一个端口来侦听,client需要一个端口来连接上别的server,两个用不同的端口(当然如果能用同一个端口更好)另外:有一个公网固定ip的server,如果连接它的client里有通过代理服务器上internet的,其他client怎么连接到这个client?
静候高手指点。有实例更好
[email protected]
先谢谢了
解决方案 »
- 关于ASTA的使用问题
- Reset(TF);
- idTcpServer控件报socket error,救命啊。。。
- 为什么我这样创建控件会出错?
- 哪位大哥帮帮小弟啊!!!先谢了(不同系统的问题)
- 怎样向远程的计算机发送数据包 验证Window系统的用户和密码
- 渴望寻找在杭州实习单位
- 如何识别Form中是否有ADOQUERY组件?
- 如何获得dbgrid的当前所指的纪录?
- delphi5中的全局integer数组是否系统会自动初始化为0
- 使用TActionList控件,将TAction(ActionList.Action[0].Caption)赋给一string变量时,string变量变成了乱码
- 谁有Netapi32.dll内的函数帮助???(中英文都可以)
2.通过Server中转即可.client对client很难穿越局域网内部.
indytcpclient一般向indytcpserver连接,如果即要做client有要做server,只要放1个indytcpclient和1个indytcpserver控件
客户端的通讯,也需要通过server端中转的。类似与聊天室程序,你可以去下载demo来看。delphi自带的有indy的demo的网址。
大概过程是这样的:
1、idTcpServer在收到连接请求建立连接后,会自动分配线程给新连接。此时要把该客户端的ip地址等信息加入到一个列表里。
GetMem(NewClient, SizeOf(TClient)); NewClient.DNS := AThread.Connection.LocalName;
NewClient.Connected := Now;
NewClient.LastAction := NewClient.Connected;
NewClient.Thread :=AThread; AThread.Data:=TObject(NewClient); try
Clients.LockList.Add(NewClient);
finally
Clients.UnlockList;
end;2、客户端发过来的请求,其中会有“要发给谁”的一些信息,server端收到后从列表里选出该主机的一些信息,发消息给它。
with Clients.LockList do
try
for i := 0 to Count-1 do
begin
RecClient:=Items[i];
if RecClient.DNS=CommBlock.ReceiverName then // we don't have a login function so we have to use the DNS (Hostname)
begin
RecThread:=RecClient.Thread;
RecThread.Connection.WriteBuffer(NewCommBlock, SizeOf(NewCommBlock), True);
end;
end;
finally
Clients.UnlockList;
end;
3、客户端的接收程序:可建立一个线程,监听端口,收到后做一些处理:如
procedure TClientHandleThread.Execute;
begin
while not Terminated do
begin
if not ClientFrmMain.Client.Connected then
Terminate
else
try
ClientFrmMain.Client.ReadBuffer(CB, SizeOf (CB));
Synchronize(HandleInput);
except
end;
end;
end;
去下载这个demo吧
qq是怎么实现p2p连接的呢?