C++ Builder - 使用 TIdTCPServer 以编程方式创建 TCP 服务器连接

标签 c++ tcp c++builder indy

我需要使用 TIdTCPServer 组件实现一个 TCP 服务器 连接。 我已经使用 GUI(拖放)及其工作完成了它。但我需要拆分表单和 TCP 实现。到目前为止我看到的示例代码总是使用 TIdTCPServer 作为 TForm 类的成员。(拖放的结果)。

我如何调用从 TForm 实现的 TCPConnection

TCPConnection CConnection = new TCPConnection(Owner, this);

以下是我尝试创建 TCP 服务器 连接的方法。

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;

}

到目前为止代码有效。但是当我尝试访问上下文时,连接丢失并且抛出异常

void TCPConnection::OnConnect(TIdContext *AContext){
    String IP = AContext->Binding()->PeerIP;
}

void TCPConnection::OnException(TIdContext *AContext, Exception *AException)

{
    ShowMessage("Error:" + AException->ToString());    
}

ErrorTIdTaskThreadWork (我会编辑错误,可能是错误的) 如果我不尝试访问 AContext,连接将保持没有问题。

可能是关于线程,锁定列表,......

有什么建议吗?

最佳答案

那些函数转换看起来很臭。您确定已将函数定义为 __fastcall,因为根本不需要函数转换。

如果您已正确定义它们,这应该就是您所需要的。

IdTCPServer1->OnConnect = &OnConnect;
// ... etc...

关于C++ Builder - 使用 TIdTCPServer 以编程方式创建 TCP 服务器连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20474008/

相关文章:

c++ - 基本类型数组的迭代器类型

c++ - 海湾合作委员会 : Unscoped enumeration type give an ambiguity error

c++ - typedef 一个现有的枚举类型,可能吗?

http - 在wireshark中数据包的TCP ACK

java - 是否可以通过 tcp 套接字发送握手参数?

c++ - 在 C++Builder2009 中如何正确地将指针从 void* 向下转换为 TMemo*?

c++builder - BCB6 TListBox(如何获取多选项的值)

c++ - boost iostream : how to turn ifstream into memory mapped file?

c++ - Netbeans C++ 错误 : 193

c - 当我添加代码来设置路径并想要检索文件(在我的程序中选择2)时,它将显示段错误(核心转储)