iOS进阶2 -- CocoaAsyncSocket和Websocket框架使用

iOS小技能:Socket基础知识 文章目录前言I 知识储备1.1 长连接1.2 tweak是什么?II 案例:iOS tweak 集成CocoaAsyncSocket 前言 应用场景:app端集成CocoaAsyncSocket与服务端进行通信,利用实现机器人功能。 即时通讯的大数据处理逻辑:多线程采用逐条处理,你也可以采用事务处理聊天记录大数据,但如果发生错误需要全部回滚。 创建NSBlockOperation 放到NSOperationQueue异步执行。 系统会自动将NSOperationQueue中的NSOperat 阅读详情

一、CocoaAsyncSocket部分
本部分转自:http://www.jianshu.com/p/68100d518468
客户端代码地址:https://github.com/edwardGG/SocketClient
服务端代码地址:https://github.com/edwardGG/SocketServer
CocoaAsyncSocket比较好的博客:
http://blog.youkuaiyun.com/zhu410289616/article/details/46731605
直接看代码:

1.客户端代码

#import "ViewController.h"
#import "GCDAsyncSocket.h"
@interface ViewController ()<GCDAsyncSocketDelegate>
@property (weak, nonatomic) IBOutlet UITextField *addressTF;
@property (weak, nonatomic) IBOutlet UITextField *portTF;
@property (weak, nonatomic) IBOutlet UITextField *messageTF;
@property (weak, nonatomic) IBOutlet UITextView *showMessageTF;
//客户端socket
@property (nonatomic) GCDAsyncSocket *clinetSocket;

@end

@implementation ViewController
#pragma mark - GCDAsynSocket Delegate
- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port{
    [self showMessageWithStr:@"链接成功"];
    [self showMessageWithStr:[NSString stringWithFormat:@"服务器IP : %@", host]];
    [self.clinetSocket readDataWithTimeout:-1 tag:0];
}

//收到消息
- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{
    NSString *text = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    [self showMessageWithStr:text];
    [self.clinetSocket readDataWithTimeout:-1 tag:0];
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    [self.view endEditing:YES];
}

//开始连接
- (IBAction)connectAction:(id)sender {
    //2、连接服务器
    [self.clinetSocket connectToHost:self.addressTF.text onPort:self.portTF.text.integerValue withTimeout:-1 error:nil];
}

//发送消息
- (IBAction)sendMessageAction:(id)sender {
    NSData *data = [self.messageTF.text dataUsingEncoding:NSUTF8StringEncoding];
    //withTimeout -1 :无穷大
    //tag: 消息标记
    [self.clinetSocket writeData:data withTimeout:-1 tag:0];
}

//接收消息
- (IBAction)receiveMessageAction:(id)sender {
    [self.clinetSocket readDataWithTimeout:11 tag:0];
}

- (void)showMessageWithStr:(NSString *)str{
    self.showMessageTF.text = [self.showMessageTF.text stringByAppendingFormat:@"%@\n", str];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    //1、初始化
    self.clinetSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
}

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

@end

说明:1.引入GCDAsyncSocket.h头文件
2.初始化GCDAsyncSocket对象,并设置代理
3.根据发出和接收到的信息进行处理。

2.服务端代码

#import "ViewController.h"
#import "GCDAsyncSocket.h"
@interface ViewController ()<GCDAsyncSocketDelegate>
@property (weak, nonatomic) IBOutlet UITextField *portF;
@property (weak, nonatomic) IBOutlet UITextField *messageTF;
@property (weak, nonatomic) IBOutlet UITextView *showContentMessageTV;

//服务器socket(开放端口,监听客户端socket的链接)
@property (nonatomic) GCDAsyncSocket *serverSocket;

//保护客户端socket
@property (nonatomic) GCDAsyncSocket *clientSocket;

@end

@implementation ViewController
#pragma mark - 服务器socket Delegate
- (void)socket:(GCDAsyncSocket *)sock didAcceptNewSocket:(GCDAsyncSocket *)newSocket{
   //保存客户端的socket
    self.clientSocket = newSocket;
    [self showMessageWithStr:@"链接成功"];
    [self showMessageWithStr:[NSString stringWithFormat:@"服务器地址:%@ -端口: %d", newSocket.connectedHost, newSocket.connectedPort]];
    [self.clientSocket readDataWithTimeout:-1 tag:0];
}

//收到消息
- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{
    NSString *text = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    [self showMessageWithStr:text];
    [self.clientSocket readDataWithTimeout:-1 tag:0];
}

//发送消息
- (IBAction)sendMessage:(id)sender {
    NSData *data = [self.messageTF.text dataUsingEncoding:NSUTF8StringEncoding];
    //withTimeout -1:无穷大,一直等
    //tag:消息标记
    [self.clientSocket writeData:data withTimeout:-1 tag:0];
}

//开始监听
- (IBAction)startReceive:(id)sender {
    //2、开放哪一个端口
    NSError *error = nil;
    BOOL result = [self.serverSocket acceptOnPort:self.portF.text.integerValue error:&error];
    if (result && error == nil) {
        //开放成功
        [self showMessageWithStr:@"开放成功"];
    }
}

//接受消息,socket是客户端socket,表示从哪一个客户端读取消息
- (IBAction)ReceiveMessage:(id)sender {
    [self.clientSocket readDataWithTimeout:11 tag:0];
}

- (void)showMessageWithStr:(NSString *)str{
    self.showContentMessageTV.text = [self.showContentMessageTV.text stringByAppendingFormat:@"%@\n",str];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    // 1、初始化服务器socket,在主线程力回调
    self.serverSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
    }

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

@end

说明:客户端和服务端工程同时运行在模拟器上,客户端的IP地址要写自己电脑的,端口号要和服务端的相同。

二、Websocket部分

本部分转自:http://www.cocoachina.com/ios/20160527/16482.html
Websocket第三方开源框架:facebook的SocketRocket框架
github地址:https://github.com/facebook/SocketRocket

ios-基于 CocoaAsyncSocket 服务器与客户端简单实现 (swift).zip 基于 CocoaAsyncSocket 简单实现通讯类,侧重于对粘包,半包问题处理,实现客户端发送数据服务端接收,服务端发送数据客户端接收.(https://github.com/AndyCuiYTT/AYAsyncSocketDemo) 立即下载

相关推荐

iOS根据别人博客利用GCDAsyncSocket写的Socket长连接demo

iOS根据别人博客利用GCDAsyncSocket写的Socket长连接demo,根据自己需求更改使用,注释写得比较详细

Socket套接字简介——及GCDAsyncSocket组件的使用

套接字(socket):支持TCP/IP协议组的网络通信的基本单元,网络上的两个程序通过一个双向的通信连接实现数据的交换,这个链接的一端称为一个socket,系统为每个进程分配一个唯一的socket进行通信 TCP/IP协议组(包含应用层,传输层,网络层): 1.应用层:常用的HTTP(超文本传输协议):规定了浏览器和万维网服务器的通信规则。FTP(文件传输协议) 2.传输层:TCP

Hyman_YH的专栏 1147

PIVlab软件入门:从GUI操作到2D2C粒子测速实战

本文详细介绍了PIVlab软件在2D2C粒子测速中的入门与实战应用。从GUI操作到环境搭建,再到图像预处理和核心参数设置,帮助用户快速掌握这一基于MATLAB的开源工具。通过实际案例和技巧分享,展示了PIVlab在流体力学实验中的高效性和实用性。

weixin_42547431的博客 227

iOS用GCDAsyncSocket开发Socket通信

GCDAsyncSocket是CocoaAsyncSocket第三方库中的其中一个类,本文介绍的就是基于这一个类来做快速的socket通信开发,而且该库已经支持IPv4和IPv6 首先,介绍一下CocoaAsyncSocket第三方库的用途 CocoaAsyncSocket为Mac和iOS提供了易于使用且强大的异步通信库 在Podfile文件中,...

Holothurian 2700

SPSS回归分析(线性:一元(简单)和多重;非线性logistic)

SPSS线性回归分析回归分析一、线性模型(针对连续因变量,线性关系)(一)简单线性回归(一元线性回归)1、绘制散点图2、建立简单(一元)线性回归模型3、建立模型后,检查预测结果(二)多重回归分析1、绘制矩阵分布散点图(论文专用你懂的)2、建立多重回归模型point 1:自变量加入方法:逐步(步进)法3、建立模型后,检查预测结果二、非线性模型(将非线性问题转换为线性问题)1、logistic分析的回归模型1.1 建立回归模型1.2 利用回归模型进行预测 根据之前的学习,通过评价实验得到了主观数据, 通过 描述

weixin_44394352的博客 5万+

微积分,用编程理解高数(python,C,C++)

很好理解,导数中,x是哪一点的导数,dx是精准度,y等于f(x)即函数。导数结果就是瞬时变化率。积分很好理解,a为下限,b为上限,y为函数,结果就是y=f(x)下a到b的面积。只要用定积分代入a=0,b=10(10s)y=x(1*x=1)就得到结果。F(x)为原函数,即微分后的函数是f(x)dx,微分前是F(x)一列车初始速度为10m/s,加速度为。才几十行代码,微积分也不是很难啊。,问速度达到20时车走了多少米。

linhhanpy的博客 1179

socket通信以及GCDAsyncSocket的用法

Objective-c MACOS Socket 网口通信 GCDAsyncSocket

giao111111的博客 1486

AlphaFold-multimer 复合物结构预测

是DeepMind开发的AlphaFold项目的一个扩展,旨在预测蛋白质多聚体的三维结构。蛋白质多聚体是由多个蛋白质亚单位相互组装而成的结构,如酶、膜蛋白复合物和病毒颗粒。理解多聚体的结构对于揭示蛋白质的功能和相互作用非常重要。

MurphyStar的博客 5650

终极指南:CocoaAsyncSocket与WebSocket构建实时通信应用的完美组合

CocoaAsyncSocket是一款专为Mac和iOS平台设计的异步socket网络库,它能够帮助开发者轻松构建高效的实时通信应用。本文将详细介绍如何利用CocoaAsyncSocket与WebSocket技术打造稳定、快速的实时通信系统,让你的应用具备出色的网络通信能力。 ## 为什么选择CocoaAsyncSocket? CocoaAsyncSocket提供了强大的异步网络通信功能,主要

gitblog_01144的博客 1018

天地图Api4.0.怎么根据geojson的数据。把一个省的所有市区标记色块和文字

天地图

肖肖肖丽珠的博客 1513

视源CVTE嵌入式面试题及参考答案(200+面试题,17万字)

内核模块如何设置? 内核模块是可在运行时动态加载到内核或从内核卸载的代码块。以下是设置内核模块的步骤: 首先,编写内核模块代码。通常使用 C 语言编写,包含必要的头文件,如<linux/init.h>、<linux/module.h>等。在代码中,需要定义模块的初始化函数和清理函数。初始化函数在模块加载时被调用,用于进行模块的初始化工作,如注册设备、分配资源等。清理函数在模块卸载时被调用,用于释放资源、注销设备等。 例如: #include <li

大模型大数据攻城狮的专栏 2204

如何用CocoaAsyncSocket构建高性能iOS TCP通信框架:iOS-Network-Stack-Dive实战解析

在移动应用开发中,构建稳定高效的网络通信框架是每个iOS开发者必须面对的挑战。今天,我将为您深入解析基于CocoaAsyncSocket打造的高性能iOS TCP通信框架——iOS-Network-Stack-Dive。这个生产级iOS网络通信框架源自多年IM开发经验总结,日均处理万级别消息,真实服务于企业客户! ## 为什么选择CocoaAsyncSocket构建iOS TCP通信框架? C

gitblog_01030的博客 448

菜鸟哥玩蓝牙Ble4.0系列 ESP32初玩篇③ Beacon —— 广播应用,室内定位,内容推送

文章目录1、前言1.1 什么叫做Beacon?1.2 Beacon使用场景1.3 Beacon协议落地实现2、ESP32 Beacon案例3、Beacon核心库 —— BLEBeacon、BLEEddystoneTLM、BLEEddystoneURL3.1 BLEBeacon3.2 BLEEddystoneTLM3.3 BLEEddystoneURL 授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力。希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石。。。

单片机菜鸟哥的博客 2万+

iOS 接入WebSocket

WebSocket是什么 WebSocket协议是 基于TCP 的一种网络协议。 它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。 websocket与http的区别 WebSocket基本原理 帧协议: 0 1 ...

Ficow Shen 715

正弦波、方波、三角波和锯齿波信号发生器——Multisim电路仿真

调节方波信号的占空比,也就是改变输出信号的高低电平时间比例,可以设置电容不同的充放电时间来达到目的,RP2可以使得电容具有不同的充放电时间,其中二极管起到限制电流流向的作用。假设U+>U,那么输出端就达到正向饱和,电容开始充电,当电容电压大于同相输入端电压时,此时电容开始放电,由此往复,从而产生方波信号。3,正反馈支路占优势,电路开始起振并不是稳定的,振荡会不断增大,最终将导致运放饱和,输出的波形是削波失真的正弦波。通常在电路中引入负反馈,例如使用负温度系数的热敏电阻,以自动稳定增益,防止输出波形失真。

XU157303764的博客 5321

IEM模型,地表粗糙度模拟

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

探索Telegraph:iOS、tvOS和macOS的安全Web服务器

在移动和桌面应用开发领域,安全性始终是开发者关注的焦点。今天,我们将深入介绍一个强大的开源项目——Telegraph,这是一个专为iOS、tvOS和macOS平台设计的安全Web服务器,采用Swift语言编写。 ## 项目介绍 Telegraph是一个多功能的Web服务器,支持HTTP 1.0/1.1协议,提供HTTPS/TLS加密以确保数据传输的安全性。此外,它还集成了WebSocket客户

gitblog_00892的博客 482

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

推荐项目:Telegraph——安全的iOS、tvOS和macOS网络服务器

在寻找一个可以在你的Apple设备上快速部署安全Web服务的解决方案吗?那么,Telegraph可能是你需要的工具。这个由Swift编写的开源项目,提供了一个强大而简洁的Web服务器,支持HTTPS/TLS加密,以及WebSocket通信。让我们深入了解Telegraph,并探讨它如何帮助你在移动和桌面应用中实现更高级的技术集成。 ## 项目介绍 Telegraph是一个针对iOS、tvOS和

gitblog_00040的博客 682

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Websocket实现即时通讯

前言 关于我和WebSocket的缘:我从大二在计算机网络课上听老师讲过之后,第一次使用就到了毕业之后的第一份工作。直到最近换了工作,到了一家是含有IM社交聊天功能的app的时候,我觉得我现在可以谈谈我对WebSocket/Socket的一些看法了。要想做IM聊天app,就不得不理解WebSocket和Socket的原理了,听我一一道来。 目录 1.WebSocket使用场景 2.WebS...

weixin_30535843的博客 813

iOS 即时通信

第三方:云信、环信、融云、LeanCloud自建:通信协议:基于原生Socket,代表框架CocoaAsyncSocket               基于WebSocket,代表框架SocketRocket聊天协议:基于MQTT,代表框架MQTTKit               基于XMPP,代表框架XMPPFramework...

superKellyV的博客 965

iOS总结-Socket的分析(三)

参考:https://www.jianshu.com/p/2dbb360886a8    什么是心跳? 简单来说,心跳就是用来检测TCP连接的双方是否可用.虽然TCP的KeepAlive机制只能保证连接的存在,但是并不能保证客户端以及服务端的可用性. 如果某台服务器因为某些原因导致负载超高, CPU100%,无法响应任何业务请求,但是使用TCP探针则仍旧能确定连接状态,这就是典型的链接活着但是业...

qq_28551705的博客 306

ios 三方库

转载来源:https://www.jianshu.com/p/00dcc79296c1 iOS项目中常用第三方库超全总结 一个记事本关注 0.122017.04.27 11:32:20 更多实用框架github.com/Tim9Liu9/TimLiu-iOS iOS项目中常用第三方库超全总结 标签: ios库框架编程响应式 在项目中用到最多的第三方,免去了花时间去搜索,在这里进行了全面的总结. 1. 编程框架 1:基于响应式编程思想的oc 地址:https://g...

Michael Fun的专栏 1034

深入解析 PocketSocket:用 Objective-C 打造符合 RFC6455 的 WebSocket 客户端与服务端

PocketSocket 是一个用 Objective-C 编写、面向 iOS 与 macOS 的 WebSocket 库,目标是让开发者用原生的 NSStream / CFSocket 技术栈构建实时通信应用。本篇文章围绕仓库内 [Pods/PocketSocket/README.md](https://link.gitcode.com/i/f507b9ac5623d839bf351af16a4

gitblog_00875的博客 1056

网络编程websocket

主要用于监听端口号和给服务器发送消息

小马哥好棒哦 534

iOS-Network-Stack-Dive错误处理机制:企业级网络异常恢复策略

在移动应用开发中,网络通信的稳定性直接影响用户体验。iOS-Network-Stack-Dive作为一款基于CocoaAsyncSocket打造的高性能iOS网络通信框架,其企业级错误处理机制尤为出色。本文将深入解析该框架如何通过智能错误恢复策略,在复杂网络环境下保障通信的可靠性。 ## 📊 网络异常分类与识别 iOS-Network-Stack-Dive框架将网络异常分为多个类别,每种类型

gitblog_00502的博客 399

Socket简析与iOS实现

WebSocket Socket的基本概念 1.定义 网络上两个程序通过一个双向通信连接实现数据交互,这种双向通信的连接叫做Socket(套接字)。 2.本质 网络模型中应用层与TCP/IP协议族通信的中间软件抽象层,是它的一组编程接口(API),也即对TCP/IP的封装。TCP/IP也要提供可供程序员做网络开发所用的接口,即Socket编程接口。 Socket的位置 3.要素 ...

jueyi1127的博客 198
上一篇: iOS进阶1--UIWebView缓存
下一篇: ReactNative 收藏
Even_DC
博客等级 码龄12年 18粉丝 50原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值