TIdTCPServer获取客户端IP列表问题。

天轶_1 2007-06-09 07:09:04
我写了一个TIdTCPServer服务端获取客户端IP列表的代码,如下:

Memo1->Clear();
TList *list;
list=IdTCPServer1->Threads->LockList();
int i;
ShowMessage(IntToStr(list->Count));
for(i=0;i<list->Count;i++)
{AnsiString str;
TIdPeerThread *thread;
thread=(TIdPeerThread *)(list->Items[i]);
str=thread->Connection->Socket->Binding->PeerIP;
Memo1->Lines->Add(str);
}
IdTCPServer1->Threads->UnlockList();


上面这段代码放在OnConnect事件里面没有问题。
但是放到别的地方就不行了,ShowMessage(IntToStr(list->Count)); 这里老
是返回0,
我使用的是INDY 9,里面的DEMO没有这个问题。
请教各位为什么会出现这种问题,还有如何解决?
...全文
452 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
___NULL 2007-06-10
  • 打赏
  • 举报
回复
我没有使用内部的 Thread List ,而是自己维护列表

首先创建一个结构

class TSimpleClient : public TObject
{
public:
// String DNS;
// String Name;

String IP;
int Count;
unsigned int ID;
TDateTime LastConnected;

// void* Thread;
void* Data; // 指向连接的线程
//int ListLink;
// void* ListItem;

__fastcall TSimpleClient();
__fastcall ~TSimpleClient();
};

在每次连接成功时,添加一个节点,断开或者超时删除该节点

TSimpleClient* Clients = new TSimpleClient;
Clients->Count 即是,而且服务断可以利用 Clients 的 Data 随意操纵客户端

实际上这也是官方 Demo 里面的方法。
天轶_1 2007-06-10
  • 打赏
  • 举报
回复
这样比较麻烦.我还是希望能直接用那里面的Thread List,
我还没搞明白.为什么DEMO里面的CHAT(这是DELPHI版的DEMO)会不出错.

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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