【发布时间】:2013-12-26 18:17:29
【问题描述】:
我需要用TIdTCPServer 组件实现TCP Server 连接。
我已经用GUI(拖放)和它的工作做了它。但我需要拆分表单和TCP 实现。到目前为止我看到的示例代码总是使用TIdTCPServer 作为TForm 类的成员。(拖放的结果)。
我如何调用我从 TForm 实现的 TCPConnection 类
TCPConnection CConnection = new TCPConnection(Owner, this);
这是我尝试创建TCP Server 连接的方法。
TCPConnection::TCPConnection(TComponent* Owner, TForm4* TSuperForm){
IdTCPServer1 = new TIdTCPServer(Owner);
IdTCPServer1->Bindings->Clear();
//IdTCPServer1->Bindings->Add()->SetBinding("10.10.2.103", 774);
IdTCPServer1->OnConnect = (TIdServerThreadEvent)(&OnConnect);
IdTCPServer1->OnExecute = (TIdServerThreadEvent)&OnExecute;
IdTCPServer1->OnDisconnect = (TIdServerThreadEvent)&OnConnect;
IdTCPServer1->OnException = (TIdServerThreadExceptionEvent)&OnException;
IdTCPServer1->DefaultPort = 774;
IdTCPServer1->Bindings->Add();
IdTCPServer1->Bindings->Items[0]->IP="10.10.2.103";
IdTCPServer1->Bindings->Items[0]->Port=774;
IdTCPServer1->ListenQueue = 15;
IdTCPServer1->MaxConnections = 15;
IdTCPServer1->TerminateWaitTime = 5000;
IdTCPServer1->Active = true;
this->TSuperForm = TSuperForm;
}
到目前为止,这些代码都有效。但是当我尝试访问上下文时,连接丢失并且throws 出现异常
void TCPConnection::OnConnect(TIdContext *AContext){
String IP = AContext->Binding()->PeerIP;
}
void TCPConnection::OnException(TIdContext *AContext, Exception *AException)
{
ShowMessage("Error:" + AException->ToString());
}
Error 说TIdTaskThreadWork(我会编辑错误,可能是错误的)
如果我不尝试访问 AContext,则连接不会出现问题。
可能是关于线程,锁定列表,...
有什么建议吗?
【问题讨论】:
-
通常不需要全部访问
Bindings属性,除非您只想在一个特定界面上提供服务。只需设置 DefaultPort。
标签: c++ tcp c++builder indy