iOS实现UPD广播(AsyncSocket)
来源:互联网 发布:板式换热器计算软件 编辑:程序博客网 时间:2024/05/22 06:50
之前试了OC自带的socket库进行实现,但是在向服务器发送消息包时候block了,还是用AsyncSocket好了。
1.创建socket,修改配置(允许广播形式)
2.绑定本地IP
3.向服务器发送包
4.接收包
1.创建socket:一个客户端只进行一条socket的连接,所以这里使用了单例
+(Singleton *)sharedInstance{ static Singleton *sharedInstace = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedInstace = [[self alloc]init]; }); return sharedInstace;}
//创建socket(UDP) self.socket = [[AsyncUdpSocket alloc]initWithDelegate:self]; //允许广播形式 [self.socket enableBroadcast:YES error:nil];
2.绑定本地IP
self.localhost = [self getIPAddress]; NSError *error = nil; //绑定本地IP与端口 [self.socket bindToAddress:self.localhost port:0 error:&error];
本地IP的获取方法:
-(NSString *)getIPAddress{ NSString *address = @"error"; struct ifaddrs *interface = NULL; struct ifaddrs *temp_addr = NULL; int success = 0; success = getifaddrs(&interface); if(success == 0){ temp_addr = interface; while (temp_addr != NULL) { if(temp_addr->ifa_addr->sa_family == AF_INET){ //if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]){ address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)]; // } } temp_addr = temp_addr->ifa_next; } } freeifaddrs(interface); return address;}
这个原理我还没明白透,为什么其中的IPV4地址就是本地IP
3.向服务器发送包
-(void)longConnectToSocket{ NSData *dataStream = [message dataUsingEncoding:NSUTF8StringEncoding]; [self.socket sendData:dataStream toHost:@"255.255.255.255" port:YourPort withTimeout:-1 tag:0];}
广播的IP都是255.255.255.255,端口是固定的
4.接收包
这里在发送成功后进行了回调然后再接收包
-(void)onUdpSocket:(AsyncUdpSocket *)sock didSendDataWithTag:(long)tag{ [self.socket receiveWithTimeout:-1 tag:tag];}
-(BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port{ do some thing about data return YES;}
这两个方法都是delegate的方法
0 0
- iOS实现UPD广播(AsyncSocket)
- upd简单广播例子
- iOS 使用AsyncSocket实现RTSP协议
- IOS AsyncSocket
- IOS---AsyncSocket
- iOS AsyncSocket
- ios网络编程之(AsyncSocket)
- ios开发之即时通讯socket(AsyncSocket)
- iOS开发之利用AsyncSocket实现即时通信(一)
- upd
- upd
- IOS 开源库 asyncSocket
- ios-AsyncSocket框架介绍
- [iOS-GQiang]AsyncSocket
- ios socket AsyncSocket使用
- iOS AsyncSocket使用教程
- AsyncSocket实现TCP连接
- iOS开发之AsyncSocket使用教程(刚刚)
- 2015.11.4-- <<机器学习实战>>chapt1--NUMPY等安装
- UNION中ORDER By的使用
- 广播 收音机
- 枚举
- mysql 查询表死锁 和结束死锁的表步骤
- iOS实现UPD广播(AsyncSocket)
- JAVA八大基本类型
- 微信支付jsApiParameter::{"return_code":"FAIL","return_msg":"invalid out_trade_no"}
- 光学术语
- 写在前面
- WebService分别在web项目和java工程中的使用
- apt-get下载、安装的软件在哪里
- Win7 64位下安装pomelo 1.2.0
- 2,自定义函数与STL函数重载的问题