在C ++ Builder(10.1.2)中将TServerSocket绑定到特定的IP地址

时间:2017-04-07 17:28:07

标签: delphi c++builder

我仍在使用已弃用的TServerSocket组件。

我想将TServerSocket绑定到特定的IP。此问题之前已在此站点中针对Delphi提出过:How to Bind a TServerSocket to a specific IP address

但是我无法在C ++ Builder中使用它。

我的代码是:

class ServerWrapper : private TServerSocket {
 public:
      ServerWrapper();

 private:

};


ServerWrapper::ServerWrapper()
   : TServerSocket (0)
{
    //---
}

ServerWrapper* pServer =0;

//...
//..
//.

// And in a function: 

pServer = new ServerWrapper;
pServer->Address = "192.168.0.1" ;
pServer->Active = true;

然而它没有编译。 它说: E2247'TAbstractSocket :: Address'无法访问

我顺便使用C ++ Builder 10.1.2柏林。

1 个答案:

答案 0 :(得分:0)

它没有用,因为你没有正确地将Delphi代码翻译成C ++。

首先,您使用私有继承而不是公开继承。因此,从TServerSocket继承的所有公开成员和受保护成员都将在ServerWrapper中保密。 Delphi没有受保护/私有继承的概念,只有公共继承。

但更重要的是,德尔福有一种隐性友谊的概念。在一个单元中,所有类都可以完全访问在同一单元中声明的其他类的私有/受保护成员。其中包括继承的受保护成员。另一个问题中的Delphi示例利用了该功能,通过声明本地帮助程序类隐式获取对声明帮助程序的单元的Address属性的公共访问。

但是C ++没有内隐友谊的概念。要将Delphi示例翻译为C ++,您必须明确宣传对受保护Address属性的访问权。

Delphi代码的文字翻译在C ++中看起来像这样:

class TServerSocketAccess : public TServerSocket
{
public:
    __property Address;
   // or:
   // using TServerSocket::Address;
};

((TServerSocketAccess*)ServerSocket1)->Address = "192.168.0.1";
ServerSocket1->Active = true;

应用于您的ServerWrapper课程,它看起来像这样:

class ServerWrapper : public TServerSocket
{
public:
    ServerWrapper();

    __property Address;
   // or:
   // using TServerSocket::Address;
};

ServerWrapper::ServerWrapper()
    : TServerSocket (0)
{
    //---
}

ServerWrapper* pServer = 0;
//...
pServer = new ServerWrapper;
pServer->Address = "192.168.0.1";
pServer->Active = true;