安卓出现问题汇总

1, 最近使用android 调试, tcp udp 接收出现了 很大问题, 占用了非常长的时间, 最后把代码一步步退回之前, 才发现用来是 在 接收 数据时分布导致,如果在windows 下, 分段读取, 就会阻碍tcp 消息接收, 在linux 下 (android)下, 就没有相应的问题,  原因暂且不清楚
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文件夹下的所有库, 然后重新编译一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值