BCB的Socket通信组件选择(TServerSocket, TIdTCPServer)

nihaoyiyou019 2010-04-23 02:37:30
在网上看了两天,有的说TServerSocket好,但连接数较少,有的说TIdTCPServer支持连接数多,但是效率低下。我想问一下:这两个Socket通信组件,正常使用时,到底哪个支持连接数多?效率高?当然最重要的是要稳定,我用TServerSocket和TIdTCPServer各自写了一个服务端,还没拿到公网上测试,条件暂时不允许。有用过的大虾告诉一声,选哪个好。要求能够支持500左右连接,稳定运行。
...全文
493 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tsk 2010-04-25
  • 打赏
  • 举报
回复
如果是做客户端,不想写太多代码的话,那么TClientSocket就可以了。

如果是用做服务器端,建议用Windows API 去做,可以选择 重叠I/O,如果客户端连接比较多。就用完成端 口去做。

nihaoyiyou019 2010-04-23
  • 打赏
  • 举报
回复
但是用TIdTCPServer的时候,我有一个到目前为止,解决不了的问题:
当有客户端连接没有关闭时,主动关闭服务器端Socket服务,清理线程列表时,代码如下:

TList* list;
TClientNode* pCurrClient;
//WriteLog("锁定线程列表");
list = m_listClients->LockList();
try
{
for(int i = 0; i < list->Count; i++)
{
//WriteLog("对当前线程列表中的对象逐个清理");
pCurrClient = (TClientNode*)list->Items[i];
//WriteLog("获取到第" + AnsiString(i) + "个客户端对象");
if(pCurrClient->m_pThread != NULL)
{
//WriteLog("关闭第" + AnsiString(i) + "个客户端");
pCurrClient->m_pThread->FreeOnTerminate = true;
pCurrClient->m_pThread->Connection->Disconnect();
try
{
//pCurrClient->m_pThread->WaitFor();
}
catch(...)
{
}
//pCurrClient->m_pThread = NULL;
//pCurrClient->Free();
//WriteLog("第" + AnsiString(i) + "个客户端释放完毕");
}
}
//WriteLog("客户端释放完毕,清空线程列表");
m_listClients->Clear();
//WriteLog("线程列表清理完成");
}
__finally
{
//WriteLog("解锁线程列表");
m_listClients->UnlockList();
}
//WriteLog("线程列表清理完成");

如果加上pCurrClient->m_pThread->WaitFor();则程序在点Stop按钮时死掉,如果不加,则出现Terminate Thread Timeout提示,至今解决不了,请问:有什么好的解决方法吗?

[Quote=引用 1 楼 keiy 的回复:]
个人推荐TIdTCPServer.
[/Quote]
柯本 2010-04-23
  • 打赏
  • 举报
回复
个人推荐TIdTCPServer.

1,317

社区成员

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

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