使用 ICE 進程間通信時, IP 和端口的選擇
?
服務器在創建時使用的 Endpint 格式為
tcp? -h IP 地址 -p 端口
?
1 、 IP 地址的選擇
如果填某個網卡的地址,則只在這個地址上監聽,客戶端必須連這個 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; }
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
