http://bbs.blueidea.com/thread-2828556-1-1.html
但若使用FMS或者Red5流媒体服务器来中转的话很容易实现,参照Flash CS3官方帮助文档中的NetConnection和NetStream一节,有详细的讲解
你是不是要安卓源码案例啊,我只知道有网站的源码还是比较多的,个人觉得算是在行业中最大的安卓源码下载网站吧,可以百度一下,好像叫源码天堂吧,记得是Android源码频道哦,希望能够帮到你的学习。你既然都能聊天了,说明数据能够发送和接收了,传送文件还不好解决???唯一的区别就是文件可能会太大,你只要把一个文件划分为许多小的数据包,一个一个发过去不就行了。这是我原来写的,现在看起来有很多地方可以简化:读取一个文件的一个包到buf中,你在外面加个循环,将这块buf发送出去就行啦!MAX_SEND_BUF_LENGTH = 2048(2K)
/*====================================================================
函数名 :GetDataPackages
功能:获文件的数据包个数
算法实现:
引用全局变量:
输入参数说明:无
返回值说明 :无
====================================================================*/
int CClientInstance::GetDataPackages(s8 *pchFilePath)
{
//以只读形式打开指定文件
FILE *pf = fopen(pchFilePath,"rb")
if (pf == NULL)
{
printf("文件路径打开失败!")
return 0
}
//计算文件长度
fseek(pf,0,SEEK_END)
u32 dwFileLen = ftell(pf)
u32 dwPackeges = dwFileLen/MAX_SEND_BUF_LENGTH
rewind(pf)
//关闭文件
fclose(pf)
if( (dwFileLen%MAX_SEND_BUF_LENGTH) == 0 )
{
return dwPackeges
}
return dwPackeges+1
}
/*====================================================================
函数名 :ReadFileData
功能:读取文件数据
算法实现:
引用全局变量:
输入参数说明:无
返回值说明 :无
====================================================================*/
BOOL CClientInstance::ReadFileData(s8 *pchFilePath,u32 dwPackage,s8* pchFileData,u32 *pdwBufLen)
{
//以只读形式打开指定文件
FILE *pf = fopen(pchFilePath,"rb")
if (pf == NULL)
{
return FALSE
}
//计算文件总长度
fseek(pf,0,SEEK_END)
u32 dwFileSize = ftell(pf)
rewind(pf)
//计算文件还剩的长度
u32 dwRemainFileLen = dwFileSize-dwPackage*MAX_SEND_BUF_LENGTH
char achBuf[MAX_SEND_BUF_LENGTH+1]
memset(achBuf,0,MAX_SEND_BUF_LENGTH+1)
//读取文件长度为剩余长度与最大读取长度的最小值
u32 dwReadLen = min(dwRemainFileLen,MAX_SEND_BUF_LENGTH)
//偏移掉已经发送的文件数据
fseek(pf,dwPackage*MAX_SEND_BUF_LENGTH,SEEK_SET)
//读取文件
fread(achBuf,1,dwReadLen,pf)
//关闭文件
fclose(pf)
//将数据复制到输出指针中
if(pchFileData != NULL)
{
memcpy(pchFileData,achBuf,dwReadLen)
*pdwBufLen = dwReadLen
return TRUE
}
return FALSE
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)