IOS TCP 小例子总结

聊聊iOS中TCP / UDP 协议 TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于 传输层协议。 UDP(User Datagram protocol)用户数据报协议,它只提供应用进程寻址和简单的差错检测,并不提供其他功能。 TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发 阅读详情
@interface LocalFileTableViewController ()页面  的相关操作;




//    NSLog(@"%@",NSHomeDirectory());  沙箱,存放文件的地方,输出以后 在finder中 按住shift commond+G 进入文件夹,然后看刚才的数据参数进去没有




文件管理 
self.filePaths   = [NSMutableArray array];
    NSString *path  = @"/Users/gj/Desktop/day35";
    NSFileManager *fm = [NSFileManager defaultManager];
    NSArray *fileNames = [fm contentsOfDirectoryAtPath:path error:nil];
    for (NSString *fileName in fileNames) {
        NSString *filePath = [path stringByAppendingString:fileName];
        
        [self.filePaths addObject:filePath];
    }




//页面的显示LocalFileTableViewController  显示界面;


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    NSString *filePath = self.filePaths[indexPath.row];
    
    cell.textLabel.text = [filePath lastPathComponent];
    判断一个文件是否是文件夹的判断方法
    BOOL isDir;
    if ([[NSFileManager defaultManager] fileExistsAtPath:filePath isDirectory:&isDir]&&isDir) {
如果是文件夹,则在右边设置角标
         [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
        cell.detailTextLabel.text = @"";
    }else{ 
        //如果是文件显示文件的大小
//        如果通过nsdata获取文件长度  需要把文件的数据先加载到内存中 才能获取长度
//        NSData *data = [NSData dataWithContentsOfFile:filePath];
//       fileHandle 处理文件内部数据 可以指定处理某个位置的数据
处理细节数据
        NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingAtPath:filePath];
        //设置游标到某个位置
//        [fileHandle seekToFileOffset:100];
////        从游标的位置 读取某个长度的数据
//        NSData *data = [fileHandle readDataOfLength:200];
//        把游标设置到最后 并且得到文件长度
      long long fileLength = [fileHandle seekToEndOfFile];
        
        NSString *size = fileLength>1024?[NSString stringWithFormat:@"%lldKB",fileLength/1024] : [NSString stringWithFormat:@"%lldB",fileLength];
        
        cell.detailTextLabel.text = size;
        
    }
    return cell;
}








-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    NSString *filePath = self.filePaths[indexPath.row];
    BOOL isDir;
    if ([[NSFileManager defaultManager]fileExistsAtPath:filePath isDirectory:&isDir]&&isDir) {
        LocalFileTableViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"LocalFileTableViewController"];
        vc.path = filePath;
        [self.navigationController pushViewController:vc animated:YES];
        
    }else{//如果是文件夹 就创建页面继续展开,  如果是文件就上传。。。
        //拿到文件的数据;
        NSData *fileData = [NSData dataWithContentsOfFile:filePath];
        
        self.clientSocket = [[AsyncSocket alloc]initWithDelegate:self];
        
        //给谁发;
        [self.clientSocket connectToHost:@"192.168.1.56" onPort:8800 error:nil];
        
        [self.clientSocket writeData:fileData withTimeout:-1 tag:0];
        //做到这里  仍然发布过去。因为缺少文件的头,和文件的长度,
        
        NSString *headerString = [NSString stringWithFormat:@"upload&&%@&&%d",[filePath lastPathComponent],fileData.length];
    }    到这一步,拿到了数据的字符串;
到这一步虽然将要传的文件弄出来了,但是很多地方都会用到 ,所以需要声明一个工具类,用来方便的实现这些功能
}
上一步的下一步代码




-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    NSString *filePath = self.filePaths[indexPath.row];
    BOOL isDir;
    if ([[NSFileManager defaultManager]fileExistsAtPath:filePath isDirectory:&isDir]&&isDir) {
        LocalFileTableViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"LocalFileTableViewController"];
        vc.path = filePath;
        [self.navigationController pushViewController:vc animated:YES];
        
    }else{
        UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"提示" message:@"确定上传是吧,别后悔,大家伙都能看见" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
        [alertView show];
    }


}
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    if (buttonIndex == 1) {
        //如果是文件夹 就创建页面继续展开,  如果是文件就上传。。。
        //拿到文件的数据;
        NSData *fileData = [NSData dataWithContentsOfFile:self.filePath];
        
        self.clientSocket = [[AsyncSocket alloc]initWithDelegate:self];
        
        //给谁发;
        [self.clientSocket connectToHost:@"192.168.1.56" onPort:8800 error:nil];
        
        //做到这里  仍然发布过去。因为缺少文件的头,和文件的长度,
        
        NSString *headerString = [NSString stringWithFormat:@"upload&&%@&&%d",[self.filePath lastPathComponent],fileData.length];
        NSMutableData *allData = [Utils  getAllDataWithHeaderString:headerString];
        
        [allData appendData:fileData];
        
        [self.clientSocket writeData:allData withTimeout:-1 tag:0];
    }








3.工具类中 的实现代码Utils
这个Utils的工具类里面的作用是将文件的数据集合出来 然后实现一个方法 最终方便取
#import "Utils.h"


@implementation Utils
+(NSMutableData *)getAllDataWithHeaderString:(NSString *)headerString{
//将headerString的字符串转换成 二进制数据;
// 设置一个alldata集  存放数据,  数据的长度是100;
//   然后将数据集中的数据换成 二进制数据;    
    NSData *headerData = [headerString dataUsingEncoding:NSUTF8StringEncoding];
    
    NSMutableData *allData = [NSMutableData dataWithLength:100];
    
    [allData replaceBytesInRange:NSMakeRange(0, headerData.length) withBytes:headerData.bytes];
    
    return allData;
    
}
@end


#import "SeversViewController.h"
#import "AsyncSocket.h"
@interface SeversViewController ()<AsyncSocketDelegate>
@property (weak, nonatomic) IBOutlet UILabel *statusLable;
@property (weak, nonatomic) IBOutlet UIProgressView *myPV;
@property (nonatomic,strong)AsyncSocket *serverSocket;
@property (nonatomic,strong)AsyncSocket *myNewSocket;


@property (nonatomic,copy)NSString *host;


@property (nonatomic,strong)NSMutableData *allData ;


@property (nonatomic,copy)NSString *fileName;
@property (nonatomic)int fileLength;
@end


@implementation SeversViewController


- (void)viewDidLoad {
    [super viewDidLoad];
    self.serverSocket = [[AsyncSocket alloc]initWithDelegate:self]; //初始化服务器;
    [self.serverSocket acceptOnPort:8800 error:nil];//监听端口号;
}


//正常的情况下,应该是服务器有一端,客户端一端, 这里这段代码是为了方便自己测试,服务器与客户端的状态;;;;;; 正常情况应该是点击服务器然后返回的时候服务器这个页面被干掉;  这里保留是为了方便测试
//
//-(void)viewDidDisappear:(BOOL)animated{
//    self.serverSocket.delegate = nil;
//}
-(void)onSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket{
    //持有住连接进来的SOCKET   不能声明成NET开头的名字,会出错;
    self.myNewSocket = newSocket;
    
    
}
-(void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port{
    // 链接上了就要不停的读客服端传过来的, 或者要传过来的数据;
    self.host = host;//在连接成功的时候把对方的IP地址记录一下;
    [self.myNewSocket readDataWithTimeout:-1 tag:0];
}
-(void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{
    
    NSLog(@"%d",data.length);
    NSData *headData = [data subdataWithRange:NSMakeRange(0, 100)];
    
    NSString *headString = [[NSString alloc]initWithData:headData encoding:NSUTF8StringEncoding];
    
    
    if (headString&&[headString componentsSeparatedByString:@"&&"].count==3) {
        NSArray *headers =[headString componentsSeparatedByString:@"&&"];
        
        NSString *type = headers[0];
        if ([type isEqualToString:@"upload"]) {
            self.fileName = headers[1];
            self.fileLength = [headers[2]intValue];
            
            self.statusLable.text = [NSString stringWithFormat:@"%@真正在上传%@",self.host,self.fileName];
            
            
            //把剩余文件的数据取出来,放到可变data里
            NSData *subFileData = [data subdataWithRange:NSMakeRange(100, data.length-100)];
            
            self.allData = [NSMutableData data];
            
            [self.allData appendData:subFileData];
            
            //每次向服务器放数据的时候 都要将进度条的值改变。
            self.myPV.progress = self.allData.length *1.0/self.fileLength;
            
            if (self.allData.length == self.fileLength) {//这么判断表示已经传完了
                NSString *toPath = [NSString stringWithFormat:@"/Documents/%@",self.fileName];
                [self.allData writeToFile:toPath atomically:YES];
                
                //在传完的时候 告诉lable,谁谁谁 上传  什么文件完成
                self.statusLable.text = [NSString stringWithFormat:@"%@上传%@完成",self.host,self.fileName];


            }
            
            
            
            
            
            
        }
        
        
        
        else if([type isEqualToString:@"getFileList"]){
            
        }
        
        
        
        else//下载
        {
            
        }
    }else{//接收到的文件数据
        [self.allData appendData:data];
        
        //每次向服务器放数据的时候 都要将进度条的值改变。
        self.myPV.progress = self.allData.length *1.0/self.fileLength;
        
        if (self.allData.length == self.fileLength) {//这么判断表示已经传完了
            NSString *toPath = [NSString stringWithFormat:@"//Users/gj/Desktop/保存文件/%@",self.fileName];
            [self.allData writeToFile:toPath atomically:YES];
            
            self.statusLable.text = [NSString stringWithFormat:@"%@上传%@完成!!!",self.host,self.fileName];
        }
        
    }
    
    
    
    
    [sock readDataWithTimeout:-1 tag:0];
}






- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


/*
 #pragma mark - Navigation
 
 // In a storyboard-based application, you will often want to do a little preparation before navigation
 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
 // Get the new view controller using [segue destinationViewController].
 // Pass the selected object to the new view controller.
 }
 */


@end




以上上传功能实现了,现在就剩余下载功能了;   实现服务器的文件列表了;
下载功能的代码实现:    
需要获取,文件夹下面的数据, 然后客户端才可以下载。 
实现这些东西,需要一个文件类, 客户端不断的接受数据  。

把对象转换成data类型  需要的代码与实现方法:
NSData *fileData  = [NSKeyedArchiver archivedDataWithRootObject:files];

@interface File : NSObject<NSCoding>
@property (nonatomic,copy)NSString *name;
@property (nonatomic)int length;

- (void)encodeWithCoder:(NSCoder *)aCoder{
   [aCoder encodeObject:self.name forKey:@"name"];
   [aCoder encodeInt:self.length forKey:@"length"];
}

- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
   self = [super init];
   if (self) {
       self.name  = [aDecoder decodeObjectForKey:@"name"];
       self.length = [aDecoder decodeIntForKey:@"length"];
   }
   return self;

}



#import "ServerFilesTableViewController.h"

#import "AsyncSocket.h"

#import "Utils.h"

#import "File.h"

@interface ServerFilesTableViewController ()<AsyncSocketDelegate>

@property (nonatomic,strong)AsyncSocket *clientSocket;

@property (nonatomic,strong)NSArray *files;

 

@end

 

@implementationServerFilesTableViewController

 

- (void)viewDidLoad {

    [super viewDidLoad];

    

    self.clientSocket = [[AsyncSocket alloc]initWithDelegate:self];

    [self.clientSocket connectToHost:@"192.168.1.12" onPort:8800 error:nil];

    

   NSString *headerString = @"getFileList&&&&";

   NSMutableData *data = [Utils getAllDataWithHeaderString:headerString];

    

    [self.clientSocket writeData:data withTimeout:-1 tag:0];

    [self.clientSocket readDataWithTimeout:-1 tag:0];

}

 

-(void)onSocket:(AsyncSocket *)sockdidReadData:(NSData *)data withTag:(long)tag{

//   //得到了服务器列表返回的数据

    self.files = [NSKeyedUnarchiver unarchiveObjectWithData:data];

    [self.tableView reloadData];//反归档将数据解出来;

    

    //因为这个数据不是立即就得到的 对页面的数据源进行了修改,(只要不是进到界面立即处理的)

    //只要是传过来的数据 有时差,就证明修改了数据源,就需要进行[self.tableView reloadData];

   // [self.tableView reloadData];

    

}

- (void)didReceiveMemoryWarning{

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

 

 

 

 

 

- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section {

 

    // Return the number of rows in the section.

    return self.files.count;

}

 

 

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

    

   File *file = self.files[indexPath.row];

   cell.textLabel.text = file.name;

   cell.detailTextLabel.text = [NSString stringWithFormat:@"%dB",file.length];

    

   return cell;

}

 

 

 

@end


iOS TCP的使用及粘包断包处理 概要:有关TCP的与服务器的三次握手此处就不介绍了,网上有很多基础知识,此篇主要是介绍使用TCP与服务器通信的实战项目。 一、TCP的基本使用   使用TCP与服务器通讯,我是使用GCDAsyncSocket三方库,首先在github中下载类库,加到项目工程,或者直接使用cocopods导入封装自己在项目中使用的TCP类库,在OGTcpClient.h中定义常用属性,socket连接和 阅读详情

相关推荐

TCP 抓包分析:tcp抓包工具、 iOS/HTTPS 流量解析全流程

本文系统介绍 TCP 抓包分析流程,涵盖 tcpdump/Wireshark 常用命令与过滤、重传/拥塞/MTU/握手诊断、iOS/HTTPS 场景下的抓包技巧及实战排查步骤,帮助工程师快速定位网络问题。

2501_91380052的博客 1016

IOS TCP通讯

1.使用三方库AsyncSocket(对socket套接字封装),这里只演示tcp方式的通讯 2.ViewController 作为Server端. SendViewController作为Client端, 3.注意点: 1>服务器端注意点 服务器中NSMutableArray *allClientArray; 用来存放所有的socket连接,不然客户端连接之后就会断开 连接成功后死等数据过来 [

欢迎来到一度's博客 1476

ios tcp和udp的socket第三方封装类库

主要使用到asyncsocket(tcp协议)和asyncudpsocket(udp协议),使用了ARC,如果需要非ARC的可以对该文件禁用arc。内含使用例子,客户端和服务器端都有。暂时最新的了。 (资源分1分,需要拿回分数的评论即可,无需浪费您任何资源分,望大家上传资源都能大公无私,1分当作辛苦分)

iOS开发网络协议----HTTP/TCP/IP浅析&&Socket

1、OSI分层 2、TCP和UDP的区别 3、TCP/IP协议 4、SOCKET原理

逝水无情的博客 2740

TCPDemo传输

TCPDemo 关于tcp套接字的简单实用,服务端和客户端的信息传输

IOS (iPhone)tcp通讯客户端源码

连接到服务端就可以相互发数据,类基本都在DDSocket.m里,粘出来就可以用.

iOS TCP协议的理解(基于Socket【套接字】)

文章目录 一、什么是TCP协议 二、TCP的三次握手和四次挥手 三、什么是Socket(套接字) 四、Soeket有什么作用 五、导入 AsyncSocket 六、如何使用Socket Program(基于AsyncSocket) 一、什么是TCP协议 TCP协议对应于传输层,主要解决数据如何在网络中传输,而应用层的HTTP协议,主要解决如何...

风中的劲草 5350

ios tcp连接发送数据

先运行服务器端,已自己的电脑做为服务端,连接ip以自己的电脑的ip,端口为8080,一个为接受端,一个为发送端,

iOS 开发 网络编程详解之TCP&UDP

网络通信三要素 IP地址(主机名) 端口号 传输协议 IP地址(主机名)本地回环地址:127.0.0.1 主机名:localhost 每台计算机都有一个 127.0.0.1 如果 127.0.0.1 ping 不通,说明网卡不工作 如果本机地址 ping 不通,说明网线坏了端口号用于标示进程的逻辑地址,不同进程的标示 有效端口:0~65535 其中 0~1024由系统使用或者保留端口 开发中不要使用

高级软件开发工程师--周玉的博客 4146

ios-利用局域网,传输文件.zip

利用局域网,传输文件 利用 node.js 搭建的服务器,对局域网中的文件进行共享的一款适用于mac的项目。方便在工作中文件的传输。(此软件适用于ios开发者) 配置node环境 * 先下载node [下载node官网](https://nodejs.org/en/download/) * 安装node 运行项目 * 下载项目 [软件地址](https://github.com/tianjifou/LocalAreaNetwork.git) * 使用xcode运行项目 * 将项目中的MacTest.xcodeproj文件拖入指定框内 * 将文件拖入第二个框内(文件夹不支持)一般支持可传输独立文件。 * 点击生成链接,就会在中间的编辑框内生成网址 * 将网址分享给在一个局域网的其他人, * 关闭工程,对方就会访问不到文件

M1安装homebrew报错LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54解决方法

在mac系统中,使用homebrew可以很方便的管理包。但按照官网的说明执行命令时总是报错原因是这个资源访问有问题,那么我们可以直接使用国内的镜像。给大家推荐一个中国科学技术大学的镜像站点,里面有各种资源https言归正传,开始踩坑。......

qq_42427085的博客 1456

IOS七层模型、TCP/IP五层模型

应用层(对应七层模型的应用层、会话层、表示层)、传输层、网络层、数据链路层、物理层。

xw2441176267的博客 2317

MATLAB机械臂轨迹规划:在关节空间中生成多项式轨迹以及 jtraj函数(内容超详细讲解)

matlab机器人仿真,关节空间多项式轨迹生成

qq_40969179的博客 1万+

云服务器从零搭建Minecraft 1.14.4服务端完整教程

Minecraft服务端本质上是一个运行在JVM上的Java程序,理解其运行环境是搭建联机服务器的根本前提。通过云服务器与Linux系统(如CentOS 7)可以完全掌控开服流程,而宝塔面板则能显著降低运维门槛,让新手也能轻松管理文件、端口与进程。本文从环境准备、Java 8版本选择、服务端核心配置、三层端口放行到自动备份与故障排查,系统梳理了原版1.14.4服务端从零到公网联机的完整链路。无论你是想摆脱现成开服平台的限制,还是希望为朋友搭建一个稳定的联机世界,这套方案都能提供清晰可靠的工程实践参考。

weixin_33908217的博客 154

STM32 使用rtthread的DMA 串口发送失败

在一次使用RTthread的DMA 串口发送时,持续性通过DMA 发送串口数据时,偶发发送过程中后续数据包无法正常发送出去,后经查,发现为RT-Thread的串口中断处理有瑕疵,后做出修改。另,为了更方便的排查为题,建议修改。左为修改前,右为修改后。

qq_39294918的博客 1108

别急着让AI画板!聊聊Cadence Allegro X AI和OrCAD X在实际PCB项目中的真实体验

本文分享了Cadence Allegro X AI与OrCAD X在PCB设计中的实际应用体验,探讨了AI辅助Layout的效率提升与潜在陷阱。通过高速ADC采集板案例,详细对比了AI与传统方法在电源平面分割、低速信号布线等任务中的表现,并总结了人机协作的最佳实践,为工程师提供实用参考。

weixin_30836759的博客 2220

iOS 网络编程 GCDasynsocket socket 发送数据

// //  ViewController.m //  070604gcdasynsocket // //  Created by tianshangrenjian on 15/7/6. //  Copyright © 2015年 tianshangrenjian. All rights reserved. // #import "ViewCo

woshidaniu的专栏 1847

【电弧故障检测算法全解析,电弧串扰问题分析和解决算法】

本文系统分析了电弧故障检测算法及串扰问题解决方案。电弧检测主要采用时频域分析和机器学习方法,通过提取高频噪声、波形畸变等特征实现故障识别。针对电弧串扰问题,提出了自适应滤波、盲源分离和时频联合分析等算法。研究给出了Python和C语言的算法实现示例,包括高频能量检测、过零率计算和陷波滤波器设计。最后指出算法优化方向:实时性提升可采用滑动窗口FFT和硬件加速;抗干扰增强需结合硬件滤波;机器学习扩展可引入随机森林等分类器。该研究为电弧故障检测系统开发提供了完整的技术路线。

syttt的专栏 891

IOS 下载文件断点续传原理与实现(附源码)

文件断点续传原理与实现 在网络状况不好的情况下,对于文件的传输,我们希望能够支持可以每次传部分数据。首先从文件传输协议FTP和TFTP开始分析, FTP是基于TCP的,一般情况下建立两个连接,一个负责指令,一个负责数据;而TFTP是基于UDP的,由于UDP传输是不可靠的,虽然传输速度很快,但对于普通的文件像PDF这种,少了一个字节都不行。本次以IM中的文件下载场景为例,

滴水可以穿石 百炼才能成钢,谋全局而通一域 致广大而尽精微 2352

【QGIS、OSM】利用python开源工具实现指定区域的交通分配

如果从osmgnms和grid2demand得到的node.csv,我们要修改path4gnms代码中的utils.py的四处设置。利用QGIS实现可视化,得到的link_performance.csv,参数有volume和VOC。改完这四处代码,就可以运行path4gnms中的tutorial.ipynb了。

weixin_40594084的博客 1277

LLC谐振电路增益公式推导

LLC谐振电路增益公式理解

金凯*博客 1万+

socket第三方库 AsyncSocket(GCDAsyncSocket)

Socket描述了一个IP、端口对。它简化了程序员的操作,知道对方的IP以及PORT就可以给对方发送消息,再由服务器端来处理发送的这些消息。所以,Socket一定包含了通信的双发,即客户端(Client)与服务端(server)。 1)服务端利用Socket监听端口; 2)客户端发起连接; 3)服务端返回信息,建立连接,开始通信; 4)客户端,服务端断开连接。 1套接

GG_8080的专栏 884

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

iOS开发-使用OC搭建自己的Socket 包括服务端和客服端

iOS-使用OC搭建自己的Socket 包括服务端和客服端前言开发须知客服端服务端两端测试 前言 iOS开发中需要使用到Socket通信的地方,socket分为UDP和TCP,这次分享的是基于UDP是实现的socket。 开发须知 七层模型 计算机基础 IP地址(主机名) 本地地址127.0.0.1 主机名localhost,每台电脑都有存在一个http://www.ip138.com 端口号 和进程关联起来的(IOS App) 有效端口号:0~65535 其中0~1024由系统使用或保留 传

weixin_41732253的博客 1861

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

# iOS中Socket开发--TCP篇

1.Socket简介 Socket 百度百科: 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。 Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket

u013712343的博客 2150

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

iOS逆向-Frida Hook所有TCP请求与响应

Frida是一款动态插桩工具,支持通过JavaScript脚本注入目标进程,实时修改内存数据或拦截函数调用。在iOS逆向中,Frida可用于:Hook Objective-C方法拦截C/C++函数动态分析加密算法监控文件、网络等系统调用通过Frida Hook TCP通信,开发者可以深入理解iOS应用的网络行为,快速定位协议漏洞或分析加密逻辑。本文提供的方法覆盖了从高级API到底层Socket的全链路监控,读者可根据实际需求调整Hook点,进一步提升逆向工程效率。“知识是武器,请合法使用技术。附录。

Sensitive_web_chaser的博客 3778
上一篇: IOS 网络,客户端,服务端
下一篇: IOS UDP小例子总结
NameUseNsstring
博客等级 码龄11年 1粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值