android上live555获取IP为0.0.0.0的问题
2017-02-16 15:30
1341 查看
live555在获取IP失败时,url中的IP地址为0.0.0.0,此时地址是不可用用的,需要解决这个问题可以修改live555的源码实现。具体可修改groupsock/GroupsockHelper.cpp
文件,在netAddressBits ourIPAddress(UsageEnvironment& env)方法中修改如下方法加入自己的获取ip方法,如本文通过修改加入了获取android wlan0的ip地址。
busybox-smp ifconfig wlan0| grep 'inet addr'|busybox-smp awk -F ":" '{print $2}'|busybox-smp awk '{print $1}'
// 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地址信息。
文件,在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地址信息。
相关文章推荐
- 问题小结(9)-android获取有线网络的ip
- live555下获取ip为0的问题
- Android 获取 IP 地址
- 当 DHCP 出问题时,自动获取IP的机器也会出问题
- android SD卡路径问题以及如何获取SDCard 内存
- 今天研究了一个有趣的网络问题:双网卡DHCP(动态获取IP)
- WCF开发常见问题:“There is already a listener on IP endpoint 0.0.0.0:4503”
- 网络连接不能获取IP问题解决
- android 获取手机信息(device ip,os version etc.)
- android SD卡路径问题以及如何获取SDCard 内存
- Android使用Bitmap类获取图片像素的问题
- Android高手进阶教程(十一)之----Android 通用获取Ip的方法(判断手机是否联网的方法)!!!
- fedora 11 上配置 dhcp 获取ip 问题解决
- 获取Android源码时如何解决【fatal: Unable to look up android.git.kernel.org (port 9418) (Name or service not known)】的问题
- 转:Android 通用获取Ip的方法(判断手机是否联网的方法)
- android SD卡路径问题以及如何获取SDCard 内存
- android 关于获取焦点问题
- Android高手进阶教程(十一)之----Android 通用获取Ip的方法(判断手机是否联网的方法)!!!
- android 获取手机号问题
- android ListItem 焦点获取问题