android上live555獲取IP為0.0.0.0的問題

yingxian_Fei發表於2017-02-16

live555在獲取IP失敗時,url中的IP地址為0.0.0.0,此時地址是不可用用的,需要解決這個問題可以修改live555的原始碼實現。具體可修改groupsock/GroupsockHelper.cpp

檔案,在netAddressBits ourIPAddress(UsageEnvironment& env)方法中修改如下方法加入自己的獲取ip方法,如本文通過修改加入了獲取android wlan0的ip地址。

1、檢視ip地址

首先通過shell命令檢視當前裝置的ip地址是否有效,如檢視wlan0網路節點的ip地址可以使用如下命令,其餘的網路卡類似處理:

busybox-smp ifconfig wlan0| grep 'inet addr'|busybox-smp awk -F ":" '{print $2}'|busybox-smp awk '{print $1}'

2、新增程式碼

在groupsock/GroupsockHelper.cpp檔案中找到netAddressBits ourIPAddress(UsageEnvironment& env)方法。在如下程式碼前加入自己查詢ip的程式碼:

    // Make sure we have a good address:
    netAddressBits from = fromAddr.sin_addr.s_addr;
    if (badAddressForUs(from)) {
      char tmp[100];
      sprintf(tmp, "This computer has an invalid IP address: %s", AddressString(from).val());
      env.setResultMsg(tmp);
      from = 0;
    }

加入的程式碼如下:

	if (badAddressForUs(fromAddr.sin_addr.s_addr))
	{
      #define TMP_BUF_LEN 32
	  char tIpBuf[TMP_BUF_LEN]={0};
	  FILE *fpRead = NULL;
	  //get wlan0's ipaddr.
	  char* command = (char*)"busybox-smp ifconfig wlan0| grep 'inet addr'|busybox-smp awk -F \":\" '{print $2}'|busybox-smp awk '{print $1}'";
	  char* renewCh = NULL;   
	  fpRead = popen(command, "r");
	  if(NULL != fpRead)  {
	  	 fgets(tIpBuf, TMP_BUF_LEN, fpRead);
		 pclose(fpRead);
		 renewCh = strstr(tIpBuf,"\r");
		 if(renewCh)  {
	  	    *renewCh='\0';
		 }
		 renewCh = strstr(tIpBuf,"\n");
		 if(renewCh)  {
		 	*renewCh= '\0';
		 }
		 fromAddr.sin_addr.s_addr=our_inet_addr(tIpBuf);
	  }
	}

上述程式碼表示在嘗試之前的兩種獲取IP地址的方法後如果獲取到的ip地址仍然不可用,那麼就使用shell指令碼獲取有效的ip地址資訊。

相關文章