免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2925 | 回复: 2
打印 上一主题 下一主题

[C++] ACE在android上应用老是提示Connection Refused [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-10-31 15:23 |只看该作者 |倒序浏览
我把ACE源码移植到android上,通过JNI调用方法,手机作为Client,linux作为server,做一个简单的消息交互Demo,奇怪的是,同样的代码,在PC与PC之间就没问题,但在android和PC间就一直报errno=111 Connection Refused

先贴android上的client端代码:
  1. int ACE_Agent::init(const char *strPort , const char *strHost)
  2. {
  3.     if ( !strPort || !strHost )
  4.         {
  5.                 return -1;
  6.         }
  7.         mConnector = new ACE_SOCK_Connector();
  8.        
  9.         mAddr.set(strPort , strHost);
  10.         ACE_Time_Value timeout(5);
  11.        
  12.         int result = mConnector->connect(mStream , mAddr , &timeout);
  13.         if( 0 != result )
  14.         {
  15.                 LOGE("*ERROR* Fail to Connect the Server ! result = %d errno = %d , strerr = %s 10s\n",result,errno,strerror(errno));
  16.                 return -1;
  17.         }
  18.        
  19.         IsInit = true;
  20.        
  21.         LOGI("ACE Init Success !\n");
  22.        
  23.         //show_internet_address();
  24.        
  25.         return 0;
  26. }
复制代码
server端的代码:
  1. void *pthread_function_one(void *pArg)
  2. {
  3.         int result = 0 , width = 0;
  4.         ACE_Handle_Set active_handle_set;

  5.         std::map<std::string , ACE_SOCK_Stream>::iterator iter;
  6.        
  7. struct timeval tv = {1, 0};
  8. ACE_Time_Value atv(tv);

  9. printf("max_set = %d\n",(int)handle_set.max_set());
  10.        
  11.         while ( 1 )
  12.         {
  13.                 active_handle_set = handle_set;
  14.                 width = (int)active_handle_set.max_set() + 1; //max_set() Returns the number of the large bit.  UNIX下最大描述符+1

  15.                 if (ACE::select(width , &active_handle_set , 0 , 0 , &atv) < 1)  //ACE::select 返回活动的句柄数目
  16.                 {
  17.                         continue;
  18.                 }

  19.                 /*
  20.                 for(int i = 0; i < active_handle_set.num_set() ; i++)
  21.                 {
  22.                         printf("handle = %d , num_set = %d\n",i ,active_handle_set.num_set());
  23.                 }
  24.                 */
  25.                
  26.                 int set_size = active_handle_set.num_set();
  27.                 if (set_size > 0)
  28.                 {
  29.                         std::cout<<"set_size = "<<set_size<<std::endl;
  30.                 }
  31.                
  32.                
  33.                 #if 0  //普通的ACE_Handle_Set轮询
  34.                 for (iter = STRING_STREAM.begin() ; iter != STRING_STREAM.end() ; iter++)
  35.                 {
  36.                         if (active_handle_set.is_set((iter->second).get_handle()))
  37.                         {
  38.                                 ACE_INET_Addr inet_addr;
  39.                                 (iter->second).get_remote_addr(inet_addr);
  40.                                 std::cout<<"<==== The Data from "<<inet_addr.get_host_addr()<<" ====>"<<std::endl;
  41.                                 handle_data(iter->second);
  42.                                 active_handle_set.clr_bit(iter->second.get_handle());
  43.                         }
  44.                 }
  45.                 #endif
  46.                
  47.                
  48.                 ACE_Handle_Set_Iterator iterator(active_handle_set);
  49.                 //ACE_Handle_Set_Iterator迭代
  50.                 ACE_SOCK_Stream tmp;
  51.                
  52.                 ACE_HANDLE handle = iterator();
  53.                
  54.                 for ( ;handle != ACE_INVALID_HANDLE; handle = iterator())
  55.                 {
  56.                         //
  57.                         ACE_INET_Addr inet_addr;
  58.                         tmp.set_handle(handle);
  59.                         tmp.get_remote_addr(inet_addr);
  60.                         std::cout<<"<==== The Data from "<<inet_addr.get_host_addr()<<" ====>"<<std::endl;
  61.                         handle_data(tmp);
  62.                 }
  63.                
  64.                
  65.         }
  66. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2013-10-31 15:28 |只看该作者
防沉啊,自顶!

论坛徽章:
0
3 [报告]
发表于 2013-10-31 15:48 |只看该作者
再顶! 顶顶顶
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP