使用ICE進程間通信時,IP和端口的選擇


使用ICE進程間通信時,IP和端口的選擇

 

服務器在創建時使用的Endpint格式為

tcp  -h IP地址 -p 端口

 

1IP地址的選擇

如果填某個網卡的地址,則只在這個地址上監聽,客戶端必須連這個IP才能連通,通常情況下,不同機器之間互相調用一般用0.0.0.0,表示在所有網卡上監聽

如果只在同一機器上不同進程之間通信,建議服務器監聽IP使用127.0.0.1,客戶端在連接時也用127.0.0.1,這樣的好處是,默認防火牆不會彈出是否允許的警告

 

2、端口的選擇

一般情況下,服務器創建的服務的IP是固定的,所以端口號可以直接固定寫死,這樣才能保證客戶端知道如何找到服務器

特殊情況下,為防止端口被占用,服務器也可指定端口號為0,讓系統分配一個空閑的端口來起服務,然后服務器將該端口記錄在特定位置(e.g.共享內存),客戶端先從中取到端口后再連接服務器並調用

 

當指定端口為0時,系統分配一個空閑端口,獲取端口的代碼如下 

Ice::CommunicatorPtr g_communicator;

void startMyIce()
{
    g_communicator = Ice::initialize();
    Ice::ObjectAdapterPtr adapter = g_communicator->createObjectAdapterWithEndpoints("WsICEService", "tcp -h 127.0.0.1 -p 0");

    Ice::EndpointSeq es = adapter->getEndpoints();
    Ice::EndpointInfoPtr eip = es[0]->getInfo();
    Ice::IPEndpointInfoPtr ipeip = dynamic_cast<Ice::IPEndpointInfo*>(eip._ptr);
    int nport = ipeip->port;
    std::string sip = ipeip->host;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM