• 在ICE客户端中如何定位服务器端的位置(即如何寻找代理)


    最近开始学习ICE,头有点大,900多页的文档看了五百多页还不知CLIENT如何定位SERVER的位置,郁闷的很...昨天毛了直接看文档的最后几页..我晕原来在这里给阐述了...差不多想撞墙

    以下是中文文档中关于端点的描述:

    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;
    }

  • 相关阅读:
    今天不谈技术,谈感情~
    外派金融公司
    OAuth2-简介
    Zookeeper实战-分布式锁
    Zookeeper-基础
    Minio-对象存储
    Redis实战-BloomFilter
    Redis实战-详细配置-优雅的使用Redis注解/RedisTemplate
    Redis-基础
    SpringBoot-表单验证-统一异常处理-自定义验证信息源
  • 原文地址:https://www.cnblogs.com/buffer/p/1597751.html
Copyright © 2020-2023  润新知