ICE专题:在客户端中如何定位服务器(即如何寻找代理)
D.2 端点(Ice1.3.0中文手册附录D.2) 纲要 endpoint : endpoint 描述 端点列表由一个或多个用冒号(:)
分隔的端点组成。端点的格式如下所 示: protocol
option。所支持的协议有tcp、udp、ssl,以及 default。如果使用了default,它会被Ice.Default.Protocol
属性的值替 代。如果端点的格式有问题,或者指定了未知的协议,应用会收到 Ice::EndpointParseException。 只有安装了IceSSL
插件,才能使用ssl 协议。 各个协议及其所支持的选项将在下面描述。 TCP 端点 纲要 tcp -h host -p port -t
timeout -z 描述 tcp 端点支持以下选项: 选项描述客户语义服务器语义 -h host 指定端点的主机名 或IP
地址。如果 没有指定,将使用 Ice.Default.Hos t 的值。 确定要连接到的主 机名或IP
地址。 确定对象适配器用 于侦听连接的网络 接口,以及在适配 器所创建的代理中 向外公布的主机 名。 -p port
指定端点的端口 号。 确定要连接到的端 口( 必须指定)。 如果没有指定这个 选项,或是port
为 零,端口将由操作 系统选择。 932 代理与端点
以上是基于TCP协议的,关于UDP,SSL协议的也差不多 我在我的聊天程序中连接LAN中一台服务器的代码: #include
<Ice/Ice.h> #include <Printer.h>
using namespace std; using namespace Demo;
int main(int argc, char * argv[]) { int status = 0; char
strtemp[100];//聊天内容 char clientname[20];//客户名 char chattmp[130];
Ice::CommunicatorPtr ic; try { ic = Ice::initialize(argc,
argv); /*连接服务器:SimplePrinter16所申请的代理ID,default即为使用默认的协议TCP,-h 192.168.1.16
为服务端所在LAN中的IP地址,-p 9600为端口号*/ Ice::ObjectPrx base =
ic->stringToProxy("SimplePrinter16:default -h 192.168.1.16 -p
9600"); //创建一个Printer的代理(Printer即为客户端与服务器端的接口),利用checkedCast(base)检查代理是否存在 PrinterPrx
printer = PrinterPrx::checkedCast(base); if (!printer) { throw
"Invalid
proxy";//代理不存在 } else { printf("请输入您的ID:"); cin
>> clientname; }
while ( 1 ) { cin >> strtemp;//输入聊天内容 if ( strcmp(
strtemp,"q") == 0 ) { break;//退出聊天 } //strcat( chattmp,
clientname ); strcpy( chattmp, clientname ); strcat( chattmp, " say:
" ); strcat( chattmp, strtemp
); printer->printString(chattmp); } //发给服务器的退出消息 printer->printString(clientname); printer->printString("已退出!"); cout
<< "成功退出!" << endl; } catch (const Ice::Exception & ex)
{ cerr << ex << endl; status = 1; } catch (const
char * msg) { cerr << msg << endl; status = 1;
} if (ic) { try { ic->destroy(); } catch (const
Ice::Exception & ex) { cerr << ex << endl; status =
1; } } return status; }
|