安卓出现问题汇总
2017-01-10 14:07
183 查看
1, 最近使用android 调试, tcp udp 接收出现了 很大问题, 占用了非常长的时间, 最后把代码一步步退回之前, 才发现用来是 在 接收 数据时分布导致,如果在windows 下, 分段读取, 就会阻碍tcp 消息接收, 在linux 下 (android)下, 就没有相应的问题, 原因暂且不清楚
2, 在android下安卓apk, 如果eclipse 提示install failed,而工程编译生成apk都没问题, 可能是之前的apk没有卸载的原因。
3, 如果提示 adt/arm 之类的, 可以考虑删除 obj文件夹下的所有库, 然后重新编译一下
int CustormSocketHelper::download_recv(int sockfd, char *data, int len, int mode, int timeout) { int read_size = 0; int result = 0; fd_set fds; struct timeval out; //默认100毫秒等待,要非阻塞就置0 int can_read = 0; //容错判断 if ((data == NULL) || (sockfd <= 0)) { cocos2d::log(" netlog CustormSocketHelper::download_recv return -1 data: %s, sockfd: %d " , data, sockfd); return -1; } //超时时间 if (mode == 1) { out.tv_sec = 0; out.tv_usec = timeout * 1000; //毫秒级 cocos2d::log(" netlog CustormSocketHelper::download_recv timeout set out.tv_sec: %d, out.tv_usec: %d ", out.tv_sec, out.tv_usec); } //读取数据 while (read_size<len) { cocos2d::log(" netlog CustormSocketHelper::download_recv in while read_size: %d len:%d ", read_size, len); if (mode == 1) //select模式 { can_read = 0; FD_ZERO(&fds); //每次循环都要清空集合,否则不能检测描述符变化 FD_SET(sockfd, &fds); //添加描述符 cocos2d::log("netlog CustormSocketHelper::download_recv in switch sockfd: %d", sockfd); int switchIndex = select(sockfd + 1, &fds, NULL, NULL, &out); cocos2d::log("netlog CustormSocketHelper::download_recv switchIndex: %d", switchIndex); switch (switchIndex) //select使用 { case -1: //select错误,退出程序 { cocos2d::log("netlog CustormSocketHelper::download_recv case -1 : read_size: %d", read_size); if (read_size>0) //之前已经读到数据 { return read_size; } else { return -1; //error } break; } case 0: //超时 { if (read_size>0) //之前已经读到数据 { return read_size; } else { return -2; //超时 } break; } default: { if (FD_ISSET(sockfd, &fds)) //测试sock是否可读,即是否网络上有数据 { cocos2d::log("netlog CustormSocketHelper::download_recv if (FD_ISSET(sockfd, &fds))"); can_read = 1; } else //返回0,即socket描述符不在字符集中 { if (read_size>0) { return read_size; } else { return -1; } } break; } }//switch End } else //非select模式,直接读取数据 { can_read = 1; } //可以读取数据 if (can_read == 1) { result = recv(sockfd, data + read_size, len - read_size, 0); cocos2d::log("netlog CustormSocketHelper::download_recv can_read == 1 , result: %d", result); if (result>0) { read_size += result; } else { if (read_size>0) { return read_size; //未读到指定长度数据,返回实际读到的字节数 } else { return -3; //recv 错误肯能是-1,0 -3直接代表是recv而非select错误 } } } }//while End return read_size; }
2, 在android下安卓apk, 如果eclipse 提示install failed,而工程编译生成apk都没问题, 可能是之前的apk没有卸载的原因。
3, 如果提示 adt/arm 之类的, 可以考虑删除 obj文件夹下的所有库, 然后重新编译一下
相关文章推荐
- IIS下Zend 出现 Unable to view file mapping 问题的解决方法汇总
- VC下编译和链接常出现的问题汇总
- Ubuntu 10.04更新Android代码时出现的问题汇总
- 关于安卓高版本访问网络出现.NetworkOnMainThreadException异常的问题
- 关于安卓高版本访问网络出现.NetworkOnMainThreadException异常的问题
- DIV CSS网页布局学习中容易出现的问题汇总
- Unity3d 编译发布到安卓平台时出现的问题集
- WIN7 配置 IIS 出现问题汇总
- 关于安卓高版本访问网络出现.NetworkOnMainThreadException异常的问题 .
- AVD启动问题汇总【安卓入门七】
- 安装oracle 10g r2出现的问题汇总
- JNI出现无法找到依赖库的问题汇总(1)——Can't find dependent libraries
- Ubuntu下通过i586-mingw32msvc编译VLC出现问题汇总
- IIS部署WCF出现的各种问题汇总
- 证书和签名出现问题的解决办法汇总
- IE6常出现的问题汇总
- 【WebGoat 学习笔记】--3.试用中出现的问题汇总及解决办法
- 安卓手机遇到的一些问题汇总
- 关于安卓手机做客户端pc做服务器进行Socket通信出现问题的解决案方