首页 > 代码库 > xcode中的udp发送文件函数,分包发送每包8000个字节
xcode中的udp发送文件函数,分包发送每包8000个字节
-(void) UDP_SendFile:(NSString *) filename;
{
NSString * filepath=[NSTemporaryDirectory() stringByAppendingString:filename];
NSData * sdata=http://www.mamicode.com/[[NSData alloc] initWithContentsOfFile:filepath];
Byte *sarr;
int sumpak,curpak;
//分包发送
int total=sdata.length,curloc,srctotal=sdata.length;
sumpak=srctotal/8000;
if (srctotal%8000==0)
{
}
else
{
sumpak=sumpak+1;
}
curpak=0;
curloc=0;
NSLog(@"总数:%d",total);
//文件信息头:EA EA FILETYPE PAKNUM1 PAKNUM2 PAKNUM2 PAKNUM3 PAKSUM1 PAKSUM2 PAKSUM3 PAKSUM4 DATALEN1 DATALEN2 CHK1 CHK2 TEMP
while (total>8000)
{
curpak++;
NSData *pdata=http://www.mamicode.com/[sdata subdataWithRange:NSMakeRange(curloc,8000)];
sarr=new Byte[8016];
Byte * bytes;
sarr[0]=0xea; //头标记
sarr[1]=0xea; //头标记
sarr[2]=0; //文件类型
sarr[3]=curpak/256/256/256; //包序号
sarr[4]=curpak%(256*256*256)/256;
sarr[5]=curpak%(256*256)/256;
sarr[6]=curpak%(256*256)%256;
sarr[7]=sumpak/256/256/256; //总包数
sarr[8]=sumpak%(256*256*256)/256;
sarr[9]=sumpak%(256*256)/256;
sarr[10]=sumpak%(256*256)%256;
sarr[11]=8000/256;
sarr[12]=8000%256;
int check=0;
bytes=(Byte *)[pdata bytes];
for(int i=0;i<8000;i++)
{
check=check+bytes[i];
sarr[i+16]=bytes[i];
}
sarr[13]=check/256;
sarr[14]=check%256;
sarr[15]=0;
NSData *sdata=http://www.mamicode.com/[[NSData alloc]initWithBytes:sarr length:8016];
[udpClient sendData:sdata toHost:serverip port:8009 withTimeout:5000 tag:1];
total=total-8000;
curloc=curloc+8000;
sarr=nil;
NSLog(@"%d",8000);
}
if (total>0)
{
curpak++;
NSData *pdata=http://www.mamicode.com/[sdata subdataWithRange:NSMakeRange(curloc,total)];
sarr=new Byte[total+16];
Byte * bytes=(Byte *) [pdata bytes];
sarr[0]=0xea; //头标记
sarr[1]=0xea; //头标记
sarr[2]=0; //文件类型
sarr[3]=curpak/256/256/256; //包序号
sarr[4]=curpak%(256*256*256)/256;
sarr[5]=curpak%(256*256)/256;
sarr[6]=curpak%(256*256)%256;
sarr[7]=sumpak/256/256/256; //总包数
sarr[8]=sumpak%(256*256*256)/256;
sarr[9]=sumpak%(256*256)/256;
sarr[10]=sumpak%(256*256)%256;
sarr[11]=8000/256;
sarr[12]=8000%256;
int check=0;
for(int i=0;i<total;i++)
{
check=check+bytes[i];
sarr[i+16]=bytes[i];
}
sarr[13]=check/256;
sarr[14]=check%256;
sarr[15]=0;
NSData *sdata=http://www.mamicode.com/[[NSData alloc]initWithBytes:sarr length:total+16];
[udpClient sendData:sdata toHost:serverip port:8009 withTimeout:5000 tag:1];
NSLog(@"%d",total);
}
}