xcode中的udp发送文件函数,分包发送每包8000个字节

-(void) UDP_SendFile:(NSString *) filename;

{

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

NSData * sdata=[[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=[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=[[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=[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=[[NSData alloc]initWithBytes:sarr length:total+16];

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

NSLog(@"%d",total);

}

}

xcode中的udp发送文件函数,分包发送每包8000个字节

时间: 2024-11-10 17:18:48

xcode中的udp发送文件函数,分包发送每包8000个字节的相关文章

xcode中的udp接收数据

1.udpclient的初始化 udpClient=[[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:mainQueue]; udpClient.delegate=self; NSError *err; BOOL bret=[udpClient bindToPort:8009 error:&err];  //绑定接收数据用的端口 BOOL ret=[udpClient beginReceiving:&err ];

在Java语言中调用存储过程、存储函数、包头、包体

需要拷贝连接Oracle的jar包,路径如下图所示: 连接Oracle数据库的代码: package demo.utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class JDBCUtils { private static Stri

xcode中向项目添加文件时的选项

选择默认选项,是该项目引用了该文件 选择上面两个选项,是复制该文件到项目中 选中target后会自动把头文件放到下图中红色方框里面去:

如何删除xcode 中过期的描述性文件

1.使用终端 首先 打开终端 cd ~/Library/MobileDevice/Provisioning\ Profiles/再删除所有 rm *.mobileprovision 2.直接找到文件夹-简单粗暴 首先show in finder,接着 Com+Shi+G ,再 ~/Library/MobileDevice/Provisioning Profiles 最后找到对应的删除

PHP中封装上传文件函数

<?php /* *文件上传 * * */ //var_dump($_FILES); /* 多文件上传处理 $data = $_FILES['icon']; $name = $data['name']; if (is_array($name)) { for ($i=0; $i<count($name); $i++) { echo $data['tmp_name'][$i].'<br />'; } } else { echo '单个文件上传'; } */ $mimes = ['ima

WebSocket C# 服务端发送大数据,分包发送大数据 方法

参见协议 WebSocket数据帧结构如下图所示: 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-------+-+-------------+-------------------------------+ |F|R|R|R| opcode|M| Payload len | Extended payload length | |I|S|S|S| (4) |A| (7) | (1

python批量执行命令发送文件

#!/usr/bin/python #-*- coding: utf-8 -*- import paramiko import datetime import os,tab,sys from multiprocessing import Process, Pool host_list = ( ('192.168.1.127','root','123456'), ('192.168.1.137','root','123456'), ('192.168.1.143','root','123456')

c#中关于udp实现可靠地传输(数据包的分组发送) 升级版

在c#中关于udp实现可靠地传输(数据包的分组发送)中我们讨论了,UDP包的发送,但是上一个程序有一个问题,就是数据比较大,一个Message类序列化后都有2048B,而实际的数据量也就不过 50B罢了,这就说明其中数据有效的很少,这样当传送的数据包过多后,效率会极大的降低.因此我们只有想办法减少冗余数据. 此项目中借用了飞鸽传书中的一个<FSLib.IPMessager>项目中的思想,并加以改善,感谢此项目作者,让我对此有了深刻的理解 我们需要自己定义数据的传输结构    我们可以定义一个数

BCB/Delphi中常用的VCL函数说明(文件函数)

--------------------文件操作--------------------函数名称:ChangeFileExt函数说明:更改指定文件的扩展名,函数原型如下:AnsiString __fastcall ChangeFileExt(const AnsiString FileName,const AnsiString Extension); 函数名称:DeleteFile函数说明:在计算机磁盘中删除指定的文件,如果操作成功,则函数返回真,函数原型如下:bool __fastcall De