使用 ICE 進程間通信時, IP 和端口的選擇
?
服務(wù)器在創(chuàng)建時使用的 Endpint 格式為
tcp? -h IP 地址 -p 端口
?
1 、 IP 地址的選擇
如果填某個網(wǎng)卡的地址,則只在這個地址上監(jiān)聽,客戶端必須連這個 IP 才能連通,通常情況下,不同機器之間互相調(diào)用一般用 0.0.0.0 ,表示在所有網(wǎng)卡上監(jiān)聽
如果只在同一機器上不同進程之間通信,建議服務(wù)器監(jiān)聽 IP 使用 127.0.0.1 ,客戶端在連接時也用 127.0.0.1 ,這樣的好處是,默認防火墻不會彈出是否允許的警告
?
2 、端口的選擇
一般情況下,服務(wù)器創(chuàng)建的服務(wù)的 IP 是固定的,所以端口號可以直接固定寫死,這樣才能保證客戶端知道如何找到服務(wù)器
特殊情況下,為防止端口被占用,服務(wù)器也可指定端口號為 0 ,讓系統(tǒng)分配一個空閑的端口來起服務(wù),然后服務(wù)器將該端口記錄在特定位置( e.g. 共享內(nèi)存),客戶端先從中取到端口后再連接服務(wù)器并調(diào)用
?
當(dāng)指定端口為 0 時,系統(tǒng)分配一個空閑端口,獲取端口的代碼如下 ?
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;
}
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

