- 论坛徽章:
- 0
|
我把ACE源码移植到android上,通过JNI调用方法,手机作为Client,linux作为server,做一个简单的消息交互Demo,奇怪的是,同样的代码,在PC与PC之间就没问题,但在android和PC间就一直报errno=111 Connection Refused
先贴android上的client端代码:- int ACE_Agent::init(const char *strPort , const char *strHost)
- {
- if ( !strPort || !strHost )
- {
- return -1;
- }
- mConnector = new ACE_SOCK_Connector();
-
- mAddr.set(strPort , strHost);
- ACE_Time_Value timeout(5);
-
- int result = mConnector->connect(mStream , mAddr , &timeout);
- if( 0 != result )
- {
- LOGE("*ERROR* Fail to Connect the Server ! result = %d errno = %d , strerr = %s 10s\n",result,errno,strerror(errno));
- return -1;
- }
-
- IsInit = true;
-
- LOGI("ACE Init Success !\n");
-
- //show_internet_address();
-
- return 0;
- }
复制代码 server端的代码:- void *pthread_function_one(void *pArg)
- {
- int result = 0 , width = 0;
- ACE_Handle_Set active_handle_set;
- std::map<std::string , ACE_SOCK_Stream>::iterator iter;
-
- struct timeval tv = {1, 0};
- ACE_Time_Value atv(tv);
- printf("max_set = %d\n",(int)handle_set.max_set());
-
- while ( 1 )
- {
- active_handle_set = handle_set;
- width = (int)active_handle_set.max_set() + 1; //max_set() Returns the number of the large bit. UNIX下最大描述符+1
- if (ACE::select(width , &active_handle_set , 0 , 0 , &atv) < 1) //ACE::select 返回活动的句柄数目
- {
- continue;
- }
- /*
- for(int i = 0; i < active_handle_set.num_set() ; i++)
- {
- printf("handle = %d , num_set = %d\n",i ,active_handle_set.num_set());
- }
- */
-
- int set_size = active_handle_set.num_set();
- if (set_size > 0)
- {
- std::cout<<"set_size = "<<set_size<<std::endl;
- }
-
-
- #if 0 //普通的ACE_Handle_Set轮询
- for (iter = STRING_STREAM.begin() ; iter != STRING_STREAM.end() ; iter++)
- {
- if (active_handle_set.is_set((iter->second).get_handle()))
- {
- ACE_INET_Addr inet_addr;
- (iter->second).get_remote_addr(inet_addr);
- std::cout<<"<==== The Data from "<<inet_addr.get_host_addr()<<" ====>"<<std::endl;
- handle_data(iter->second);
- active_handle_set.clr_bit(iter->second.get_handle());
- }
- }
- #endif
-
-
- ACE_Handle_Set_Iterator iterator(active_handle_set);
- //ACE_Handle_Set_Iterator迭代
- ACE_SOCK_Stream tmp;
-
- ACE_HANDLE handle = iterator();
-
- for ( ;handle != ACE_INVALID_HANDLE; handle = iterator())
- {
- //
- ACE_INET_Addr inet_addr;
- tmp.set_handle(handle);
- tmp.get_remote_addr(inet_addr);
- std::cout<<"<==== The Data from "<<inet_addr.get_host_addr()<<" ====>"<<std::endl;
- handle_data(tmp);
- }
-
-
- }
- }
复制代码 |
|