xcode中的udp發送文件函數,分包發送每包8000個字節

-(void) UDP_SendFile:(NSString *) filename tag:(NSInteger) msgtag;

{

    NSString * filepath=[NSTemporaryDirectory() stringByAppendingString:filename];

    NSData * sdata=[[NSData alloc] initWithContentsOfFile:filepath];

    

    Byte *sarr;

    NSData *fdata=[filename dataUsingEncoding:NSUTF8StringEncoding];

    

    int sumpak,curpak;

    

    //分包发送

    int total=sdata.length,curloc,srctotal=sdata.length;

    sumpak=srctotal/8;

    if (srctotal%8==0)

    {

    }

    else

    {

        sumpak=sumpak+1;

    }

    curpak=0;

    curloc=0;

    NSLog(@"总数:%d",total);

    //文件信息头:

    /*    EA EA                                     2

          FILETYPE                                  1

          msgtag1 msgtag2 msgtag3 msgtag4           4

          PAKNUM1 PAKNUM2 PAKNUM3 PAKNUM4           4

          PAKSUM1 PAKSUM2 PAKSUM3 PAKSUM4           4

          DATALEN1 DATALEN2                         2

          filename                                  100

          CHK1 CHK2                                 2

     */

    while (total>8)

    {

        curpak++;

        NSData *pdata=[sdata subdataWithRange:NSMakeRange(curloc,8)];

        sarr=new Byte[8120];

        Byte * bytes;

        sarr[0]=0xea;   //头标记

        sarr[1]=0xea;   //头标记

        sarr[2]=0;      //文件类型

 

        sarr[3]=msgtag/256/256/256;          //文件号

        sarr[4]=msgtag%(256*256*256)/256;

        sarr[5]=msgtag%(256*256)/256;

        sarr[6]=msgtag%(256*256)%256;

 

        sarr[7]=curpak/256/256/256;          //包序号

        sarr[8]=curpak%(256*256*256)/256;

        sarr[9]=curpak%(256*256)/256;

        sarr[10]=curpak%(256*256)%256;

        

        sarr[11]=sumpak/256/256/256;          //总包数

        sarr[12]=sumpak%(256*256*256)/256;

        sarr[13]=sumpak%(256*256)/256;

        sarr[14]=sumpak%(256*256)%256;

        

        Byte *fbytes=(Byte *)[fdata bytes];

        NSUInteger totalf;

        if ([fdata length]>100)

        {

            totalf=100;

        }

        else

        {

            totalf=[fdata length];

        }

        for(int i=0;i<100;i++)

            sarr[17+i]=0;

        

        for(int i=0;i<totalf;i++)

        {

            sarr[17+i]=fbytes[i];

        }

        

        sarr[15]=8/256;

        sarr[16]=8%256;

        int check=0;

        bytes=(Byte *)[pdata bytes];

        for(int i=0;i<8;i++)

        {

            check=check+bytes[i];

            sarr[i+120]=bytes[i];

        }

        sarr[117]=check/256;

        sarr[118]=check%256;

        sarr[119]=0;

        NSData *sdata=[[NSData alloc]initWithBytes:sarr length:8120];

        [udpClient sendData:sdata toHost:serverip port:8009 withTimeout:5 tag:1];

        total=total-8;

        curloc=curloc+8;

        sarr=nil;

        NSLog(@"%d",8);

    }

    if (total>0)

    {

        curpak++;

        NSData *pdata=[sdata subdataWithRange:NSMakeRange(curloc,total)];

        sarr=new Byte[total+120];

        Byte * bytes=(Byte *) [pdata bytes];

        sarr[0]=0xea;   //头标记

        sarr[1]=0xea;   //头标记

        sarr[2]=0;      //文件类型

        

        sarr[3]=msgtag/256/256/256;          //文件号

        sarr[4]=msgtag%(256*256*256)/256;

        sarr[5]=msgtag%(256*256)/256;

        sarr[6]=msgtag%(256*256)%256;

 

        sarr[7]=curpak/256/256/256;          //包序号

        sarr[8]=curpak%(256*256*256)/256;

        sarr[9]=curpak%(256*256)/256;

        sarr[10]=curpak%(256*256)%256;

        sarr[11]=sumpak/256/256/256;          //总包数

        sarr[12]=sumpak%(256*256*256)/256;

        sarr[13]=sumpak%(256*256)/256;

        sarr[14]=sumpak%(256*256)%256;

        

        

        

        sarr[15]=total/256;

        sarr[16]=total%256;

        int check=0;

        Byte *fbytes=(Byte *)[fdata bytes];

        NSUInteger totalf;

        if ([fdata length]>100)

        {

            totalf=100;

        }

        else

        {

            totalf=[fdata length];

        }

        for(int i=0;i<100;i++)

          sarr[17+i]=0;

        

        for(int i=0;i<totalf;i++)

        {

            sarr[17+i]=fbytes[i];

        }

        

        for(int i=0;i<total;i++)

        {

            check=check+bytes[i];

            sarr[i+120]=bytes[i];

        }

        sarr[117]=check/256;

        sarr[118]=check%256;

        sarr[119]=0;

        NSData *sdata=[[NSData alloc]initWithBytes:sarr length:total+120];

        

        [udpClient sendData:sdata toHost:serverip port:8009 withTimeout:5 tag:1];

        NSLog(@"%d",total);

 

    }

 

}

 

更多相关文章
  • 


    		    Xcode中ARC和MRC下文件轉換
    ARC是什么 ARC是iOS 5推出的新功能,全称叫 ARC(Automatic ReferenceCounting).简单地说,就是代码中自动加入了retain/release,原先需要手动添加的用来处理内存管理的引用计数的代码可以自动地由编译器完成了.该机制在iOS 5/ Mac OS X 10 ...
  • 起因: 在一个项目中,接到用户反馈说其所有客户不能上传文件,都返回失敗.经过排查发现是PHP中的is_uploaded_file函数在捣鬼. 细节分析: 在正常情况下,通过PHP 上传文件 ,需要通过is_uploaded_file函数来判断文件是否是通过 HTTP POST 上传的,这可以用来确保
  • 


    		    轉UNITY3D 遊戲開發之七C# 中的委托、事件、匿名函數、Lambda 表達式
    本站文章均为 李华明Himi 原创,转载务必在明显处注明:(作者新浪微博: @李华明Him
  • 今天在处理多线程突然想到一个问题,多核处理器会不会导致,单一线程中,由runloop分发的2个函数同时执行呢?进而同时修改同一个变量,产生bug? 我做了以下的测试: - (void)viewDidLoad { [super viewDidLoad]; [self performSelectorOn ...
  • 1.udpclient的初始化  udpClient=[[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:mainQueue];     ud
  • hash2int /** * 计算一个字符串的md5折算成int返回 * @param type $str * @return type */ function hash2int($str) { $md5str = md5($str, true); $one = unpack('l', substr ...
  • 用LNMP环境,在探针里测试发送邮件,失敗了.已经确定mail()函数是开启的. 问题根源 没有安装或启动 sendmail 组件 解决辦法 我是新手,命令不熟,所以写的很详细,老鸟勿喷哦 1.重新安装 sendma
  • 


    		    從零開始學習C語言(一)之讀取文本文件(函數fgets)
    为什么说是从零开始呢,只要是学计算机的都会学C,但那是学校的事了,我都还给老师了.老师对不住啊.您白教我位学生了. 最近开始学习C,原因:上司让我用C写一程序.大体是:通过daemon程序从/proc/net/dev读取并统计流量,通过socket连接在server上读取daemon提供的流量信息并 ...
一周排行
  • 


    		    翻譯優化基于ExtJS 4.1的應用
    原文地址:http://www.sencha.com/blog/optimizing-ex
  • 


    		    自制H3C交換機CONSOLE線
    单位有一台H3C S3600交换机,手痒痒的想进入玩一下. 从网上查得,连接CONSOLE
  • 图集 什么是图集? 在使用3D技术开发2D游戏或制作UI时(即使用GPU绘制),都会使用到图集,而使用CPU渲染的2D游戏和UI则不存在图集这个概念(比如Flash的原生显示列表),那么什么是图集呢?准确的说法图集是 ...
  • 


    		    Not Registered 終極解決方案
    在XenDesktop项目中,我们经常会遇到VDI桌面在DDC控制台上显示为Not Reg ...
  • 首先声明,源代码转载自国外Neil Davies,使用Apache2.0开源协议,请使用源代码的人自觉遵守协议内容. 本文为Kearnel原创,转载请注明出处. 以下是正文: 使用过Android自带的gallery ...
  • Oracle Golden Gate软件是一种基于日志的结构化数据复制备份软件,它通过解析源数据库在线日志或归档日志获得数据的增量变化,再将这些变化应用到目标数据库,从而实现源数据库与目标数据库同步.Oracle G
  • Cortex-M3的中断架构和以往的ARM7.ARM9.ARM11有了很大的区别,IRQ.FIQ的概念的已经消失,随之而来的是NVIC中断管理(支持最多256个中断优先级,128级抢断)及中断向量表.这个中断向量表似 ...
  • Cisco IOS IPS Q. IOS IPS和IPS有什么不同? A. IOS IPS是带IPS功能的路由器,即可升级支持IPS功能IOS的路由器.而IPS检测器是专门的IPS系统,如Cisco IPS 4200
  • 题目: Given two binary trees, write a function to check if they are equal or not. Two binary trees are conside
  • 今天服务器负载突然很高,一下乱了阵脚,以前能用的top,ps,发现我顿时就乱了,然后就google了下,终于眼睛发光 看到了可以用的 取进程ID 1 ps aux|grep "^www "|awk ...