GCDAsyncUdpSocket的简单使用

iOS高级理论:CocoaAsyncSocket 介绍与使用 CocoaAsyncSocket为Mac和iOS提供了易于使用和功能强大的异步套接字库,主要包含两个类:GCDAsyncSocket:用GCD搭建的基于TCP/IP协议的socket网络库GCDAsyncUdpSocket:用GCD搭建的基于UDP/IP协议的socket网络库.本文主要介绍 GCDAsyncSocket的使用,他是一个TCP库,建在Grand Central Dispatch上面的。TCP是面向连接的,面向流的,提供高可靠性服务。 阅读详情

说明:只是对GCDAsyncUdpSocket进行简单的使用,实现消息的收发。

1.导入

#import "GCDAsyncUdpSocket.h"

2.创建全局变量

//这个socket用来做发送使用 当然也可以接收

GCDAsyncUdpSocket *sendUdpSocket;

3.创建单例

static UDPManage *myUDPManage = nil;


+(instancetype)shareUDPManage{

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        myUDPManage = [[UDPManage alloc]init];

        [myUDPManage createClientUdpSocket];

    });

    return myUDPManage;

}

4.创建socket

#pragma mark -- 创建socket

-(void)createClientUdpSocket{

    //1.创建一个 udp socket用来和服务器端进行通讯

    sendUdpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];

    //2.banding一个端口(可选),如果不绑定端口, 那么就会随机产生一个随机的电脑唯一的端口

    //端口数字范围(1024,2^16-1)

    NSError * error = nil;

    [sendUdpSocket bindToPort:8085 error:&error];

    //启用广播

    [sendUdpSocket enableBroadcast:YES error:&error];

    if (error) {//监听错误打印错误信息

        NSLog(@"error:%@",error);

    }else {//监听成功则开始接收信息

        [sendUdpSocket beginReceiving:&error];

    }


}

5.发送消息

-(void)startScan{

    

    NSString *s = @"mapleTest";

    NSData *data = [s dataUsingEncoding:NSUTF8StringEncoding];

    NSString *host = @"255.255.255.255";//此处如果写成固定的IP就是对特定的server监测;我这种写法是为了多方监测

    uint16_t port = 36877;//通过端口监测

    [sendUdpSocket sendData:data toHost:host port:port withTimeout:-1 tag:100];

}

6.相关的代理

#pragma mark -GCDAsyncUdpSocketDelegate

-(void)udpSocket:(GCDAsyncUdpSocket *)sock didSendDataWithTag:(long)tag{

    if (tag == 100) {

        //NSLog(@"表示标记为100的数据发送完成了");

    }

}


-(void)udpSocket:(GCDAsyncUdpSocket *)sock didNotSendDataWithTag:(long)tag dueToError:(NSError *)error{

    NSLog(@"标记为tag %ld的发送失败 失败原因 %@",tag, error);

}


-(void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data fromAddress:(NSData *)address withFilterContext:(id)filterContext{

    

    NSString *ip = [GCDAsyncUdpSocket hostFromAddress:address];

    uint16_t port = [GCDAsyncUdpSocket portFromAddress:address];

    NSString *s = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    // 继续来等待接收下一次消息

    NSLog(@"收到服务端的响应 [%@:%d] %@", ip, port, s);

    [sock receiveOnce:nil];

    //此处根据实际和硬件商定的需求决定是否主动回一条消息

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

        [self sendBackToHost:ip port:port withMessage:s];

    });

}


- (void)udpSocketDidClose:(GCDAsyncUdpSocket *)sock withError:(NSError *)error

{

    NSLog(@"udpSocket关闭");

}


-(void)sendBackToHost:(NSString *)ip port:(uint16_t)port withMessage:(NSString *)s{

    NSString *msg = @"我收到了";

    NSData *data = [msg dataUsingEncoding:NSUTF8StringEncoding];

    [sendUdpSocket sendData:data toHost:ip port:port withTimeout:0.1 tag:200];

    

}


iOS学习笔记4-GCDAsyncUdpSocket的使用(实现异步发送接收数据) 做项目的时候用到了GCDAsyncUdpSocket开源库,所以在此总结下它的用法,作为笔记;GCDAsyncUdpSocket简介GCDAsyncUdpSocket开源类库是以苹果的GCD多任务处理机制完成的一个异步交互套接字通讯。如果需要使用同步的,则去寻找AsyncUdpSocket就可以了。该开源库完成了UDP之间的通信,使得UDP通信的编程变得更加简单; 阅读详情

相关推荐

GCDAsyncUdpSocket 组播监听端口接收数据

客户端开发一般是发送数据给服务端。这次反过来了,把客户端作为服务端了,监听对应端口并接收数据

nogodoss的专栏 1万+

socket通信以及GCDAsyncSocket的用法

Objective-c MACOS Socket 网口通信 GCDAsyncSocket

giao111111的博客 1486

oc下实现局域网udp广播通讯使用开源框架GCDAsyncUdpSocket

UDP是OSI参考模型中一种无连接的传输层协议,它主要用于不要求分组顺序到达的传输中,分组传输顺序的检查与排序由应用层完成[1],提供面向事务的简单不可靠信息传送服务。UDP 协议基本上是IP协议与上层协议的接口。UDP协议适用端口分别运行在同一台设备上的多个应用程序。

xiaoamani的专栏 7146

Socket 进行UDP广播数据(GCDAsyncUdpSocket)

在做一个App的时候,有一个需求是服务端在局域网当中发送广播数据,然后连接到此局域网当中的客户端接收到广播数据后,对广播数据做出相应地回复。在这个需求当中广播的唯一的好处就是客户端连接到局域网当中不需要知道服务端的IP地址,客户端通过收到服务端的广播消息之后,从广播报文当中获取到服务端的IP地址。唯一的不足是广播是一个耗能的操作,要控制好广播时间和广播的频率。 客户端和服务端之间通信我们当然要用

努力,可能成功!放弃,注定失败! 6581

iOS GCDAsyncUdpSocket UDP 建立连接,实现组播

iOS GCDAsyncUdpSocket UDP 建立连接,实现组播

smile_to_lin的博客 1695

GCDAsyncUdpSocket局域网广播发送与接收,客户端与服务端实现

app在局域网内搜索相关硬件设备,与设备进行通信。 模拟:一个手机作为服务端(广播方),另一个手机作为客户端,GCDAsyncUdpSocket通信 代码链接查看 服务端主要实现 1:GCDAsyncUdpSocket对象初始化 2:绑定端口 3:开启广播设置 4:开启接受数据 5:发送广播数据 6:代理方法的处理 客户端的实现与服务端相似,区别在与 没有开启广播...

lyh20133102的博客 2173

GCDAsyncUdpSocket 使用小记

项目使用udp通讯,以前使用AsyncUdpSocket,后来发现一个接

指尖◎假如 3110

Swift开发:GCDAsyncUdpSocket 通信之UDP广播

功能需求:                  发送广播,搜索设备 1 使用GCDAsyncUdpSocket 实现广播    下载地址:包含tcp和udp,共4个文件  2 Swift Code: // //  ViewController.swift //  3-SwiftSocket-udp // //  Created by 黄涛 on 17/4/1

遇见--专栏 6072

CocoaAsyncSocket使用笔记之GCDAsyncUdpSocket

先去github的网站下载最新的包,然后先看看介绍。 https://github.com/robbiehanson/CocoaAsyncSocket/wiki/Intro_GCDAsyncSocket 网上很多都是老版本的帖子。官方已经推出了GCDAsyncSocket来代替以前老的AsyncSocket。 1、引入GCDAsyncSocket所需要的框架,CF

zhaojian3513的专栏 3027

对GCDAsyncUdpSocket的简单封装,作为发送和接受广播,一般UDP报文的接口

对GCDAsyncUdpSocket的简单封装,作为发送和接受广播,一般UDP报文的接口,专门处理udp的发送和接受,并且广播消息单独处理,便于管理

python画弗里德曼(Friedman) 检验和秩和检验(Nemenyi)检验图

python画弗里德曼(Friedman) 检验和秩和检验(Nemenyi)检验图 画好后效果图 实现代码如下 import matplotlib.pyplot as plt #算法平均排名 _alg_=[1.405,2.643,2.786,2.167] y=[1,2,3,4]#alg1,alg2,alg3,alg4 通过Nemenyi测试计算得到的临界值CD CD=1.024 h_CD=CD/2 plt.figure(figsize=(10,6)) plt.scatter(_alg_,y,s=10

大模型天花板 4465

GCDAsyncUdpSocket 收不到广播包?

IOS开发中,使用 GCDAsyncUdpSocket接收广播包,折腾半天没有反应。其实很简单, bind port时不要指定 interface!  [mGCDAsyncUdpSocket bindToPort:0  error:&error];

yuan1809的专栏 2980

数字IC设计避坑指南:为什么477条net的DRV问题无法修复?解析don‘t touch hierarchy的影响

本文深入解析了数字IC后端实现中,因“don't touch hierarchy”约束导致大量DRV违规(如477条net)无法自动修复的根本原因。文章以Cadence Innovus工具为例,详细阐述了DRV修复机制与设计保护约束的冲突原理,并提供了从日志定位、风险评估到分级解除约束的完整实战策略,帮助工程师有效解决此类设计收敛难题。

hope8的博客 290

IOS GCDAsyncUdpSocket GCDAsyncSocket

https://www.jianshu.com/p/99042ac1aa5f#import "GCDAsyncUdpSocket.h"遵守协议<GCDAsyncUdpSocketDelegate>声明一个属性@property (strong, nonatomic)GCDAsyncUdpSocket * udpSocket;创建Socket_udpSocket = [[GCDAsync...

BusyMonkey 2154

华为硬件逻辑岗笔试题(一)

积少成多,集腋成裘,坚持!!! 目录 1. 进制转换 2. 状态机和编码方式 3. 存储器的分类 4. Verilog语法中的操作符 5. 对组合逻辑的认识 6. 对时序逻辑的认识 7. 竞争冒险的认识 8. 基本时序逻辑电路 9. 建立时间和保持时间 10. 同步时序电路 11. 组合逻辑和时序逻辑判断 13. 基本总线的理解 14.加法器 15.FPGA开发工具 1. 进制转换 1、十进制46.25对应的二进制表达式为( )。 A 101110.11...

qq_42235129的博客 1万+

拯救者R7000用户实测:用华为电脑管家11.0版搞定MatePad Pro多屏协同(附驱动与显卡避坑指南)

本文详细介绍了如何在非华为笔记本联想拯救者R7000上安装华为电脑管家11.0版,实现与MatePad Pro的多屏协同功能。从驱动优化到显卡配置,提供了全面的避坑指南和实用技巧,帮助用户解决连接失败等常见问题,提升跨设备生产力体验。

weixin_30788619的博客 398

GCDAsyncUdpSocket 设置TTL

IP:TTL解释 虽然TTL从字面上翻译,是可以存活的时间,但实际上TTL是IP数据包在计算机网络中可以转发的最大跳数。TTL字段由IP数据包的发送者设置,在IP数据包从源到目的的整个转发路径上,每经过一个路由器,路由器都会修改这个TTL字段值,具体的做法是把该TTL的值减1,然后再将IP包转发出去。如果在IP包到达目的IP之前,TTL减少为0,路由器将会丢弃收到的TTL=0的IP包并向IP

jeffasd的专栏 1639

SAP OData 开发从入门到提高教程的目录

笔者 18 年的 SAP 技术开发生涯,对 SAP OData 服务的开发,测试,发布,部署,测试,及基于各种不同 SAP 技术实现的 OData 服务的幕后技术实现细节和使用场合,均有着深入的研究。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 7245

GCDAsyncUdpSocket错误,Undefined symbols for architecture arm64:  "_OBJC_CLASS_$_GCDAsyncUdpSocket", re

GCDAsyncUdpSocket用来和硬件进行广播信息交流,很简单,很好用。 添加GCDAsyncUdpSocket工具库,出现以下错误: ------------------------------------------------------------------------ Undefined symbols for architecture arm64:   "_OBJC_C...

whererisefrom的博客 1710

【FPGA教程案例49】控制案例1——基于FPGA的PID控制器verilog实现

PID控制器产生于1915年,PID控制律的概念最早是由LYAPIMOV提出的,到目前为止,PID控制器以及改进的PID控制器在工业控制领域里最为常见。PID控制器(比例-积分-微分控制器),由比例单元 P、积分单元 I 和微分单元 D 组成。通过Kp,Ki和Kd三个参数的设定。PID控制器主要适用于基本线性和动态特性不随时间变化的系统。图1为PID控制器的基本结构框图。PID控制器以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。...

FPGA/MATLAB学习教程/源码/项目合作开发 4530

课程1:认识Asp.net Core Web API

本文是《.Net Core从零学习搭建权限管理系统》教程专栏的导航站(点击链接,跳转到专栏主页,欢迎订阅,持续更新…)专栏介绍:以实战为线索,基于.Net 7 + REST + Vue、前后端分离,不依赖任何第三方框架,从零一步一步讲解权限管理系统搭建。专栏适用于人群:Web后端开发人员Web API是一个很广泛的概念,Asp.net Core Web API是.NET框架用于创建RESTful风格的项目、用于轻松构建可供多个客户端访问的HTTP服务。1、支持RestFul风格编程;

成长的足迹 1256

iOS GCDAsyncUdpSocket接收组播视频数据,从接收,到排序,在到组包,最后送去解码渲染

记录一下,这两天使用GCDAsyncUdpSocket接收组播视频数据,从接收,到排序,在到组包,最后到送去解码渲染。 1.初始化udpSocket,绑定端口,加入组播地址,接收数据 1.1 初始化udpSocket //获取全局队列,并创建GCDAsyncUdpSocket,设置代理 dispatch_queue_t queue = dispatch_get_global_queue(DISPA...

FF_lz的博客 1275

Nova — GPU/vGPU 虚拟机

目录 文章目录目录云主机使用显卡的实现方式虚拟显卡物理显卡直通物理显卡虚拟化 云主机使用显卡的实现方式 采用虚拟显卡 采用物理显卡直通 采用物理显卡虚拟化 虚拟显卡 虚拟显卡技术,主要用于虚拟机 Remote Console 领域,如:VNC(Virtual Network Computing,虚拟网络计算机),它能将完整的窗口界面通过网络,传输到另一台计算机的屏幕上。 VNC 主要由 VNC server 和 VNC viewer 两部分组成。用户需先将 VNC server 安装在被远程操控的计算

烟云的计算 2426

GCDAsyncUdpSocket Demo

#import "ViewController.h" #import "GCDAsyncUdpSocket.h" #define STATUS_HEIGHT         20 #define IPHONE_WIDTH         [UIScreen mainScreen].bounds.size.width #define IPHONE_HEIGHT 

u011270282的专栏 1520

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

iOS学习笔记5-GCDAsyncUdpSocket中的dispatch_queue_set_specific

用到GCDAsyncUdpSocket开源库的时候,发现了这个函数: dispatch_queue_set_specific,于是做下笔记。

小小小的骆驼的前端技术博客 3612

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

GCDAsyncUdpSocket的使用

tips: 要注意服务器端口与客户端端口的区别,如果客户端绑定的是服务器的端口,那么服务器发送的消息就会一直发送给服务器。 转载于:https://www.cnblogs.com/hd1992/p/5778685.html...

weixin_30399871的博客 173

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

上一篇: iOS UISlider改变高度
下一篇: IJKMediaFramework真机和模拟器合成及下载
mapleXK
博客等级 码龄11年 5粉丝 21原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值