UdpSocket如何实现通过代理接收多包数据
2015-08-24 21:51
519 查看
// // SCUdpSocket.m // vdr // // Created by mijibao on 15/8/24. // Copyright (c) 2015年 jzkj. All rights reserved. // #import "SCUdpSocket.h" @interface SCUdpSocket() <AsyncUdpSocketDelegate> { AsyncUdpSocket *udpSocket; } @end @implementation SCUdpSocket + (id)shareUdpSocket{ static SCUdpSocket *_sharedUdpSocket = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _sharedUdpSocket = [[SCUdpSocket alloc] init]; }); return _sharedUdpSocket; } - (NSMutableDictionary *)didReceiveMessage:(NSData *)data{ NSString * str = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; NSLog(@"str : %@",str); //切割消息体 NSArray *array = [str componentsSeparatedByString:@"\r\n"]; NSArray *arraydata = [str componentsSeparatedByString:@"\r\n\r\n"]; NSMutableDictionary *dic = [NSMutableDictionary dictionary]; [dic setObject:array[0] forKey:@"head"]; if (arraydata.count>1) { [dic setObject:[(NSString*)arraydata[1] dataUsingEncoding:NSUTF8StringEncoding] forKey:@"body"]; } return dic; } - (void)sendMessageHeader:(NSString *)messageStr delegate:(id)delegate { udpSocket = [[AsyncUdpSocket alloc]initWithDelegate:self]; [udpSocket enableBroadcast:YES error:nil]; [udpSocket bindToPort:SRV_PORT error:nil]; [udpSocket receiveWithTimeout:-1 tag:100]; _delagate =delegate; [udpSocket sendData:[messageStr dataUsingEncoding:NSUTF8StringEncoding] toHost:SRV_ADDR port:SRV_PORT withTimeout:-1 tag:100]; } - (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port { static int i=0; NSLog(@"发包数 : %d",i); NSMutableDictionary *dic = [self didReceiveMessage:data]; if ([self.delagate respondsToSelector:@selector(getSeverMessage:)]) { [self.delagate getSeverMessage:dic]; } return NO; //这里为NO,才能连续接收多包数据 } @end
// // SCUdpSocket.h // vdr // // Created by mijibao on 15/8/24. // Copyright (c) 2015年 jzkj. All rights reserved. // #import "BaseViewController.h" #import <Foundation/Foundation.h> #import <AsyncUdpSocket.h> @protocol SCUdpSocketDelegate <NSObject> - (void)getSeverMessage:(NSDictionary *)dictionary; @end @interface SCUdpSocket : NSObject + (id)shareUdpSocket; - (void)sendMessageHeader:(NSString *)messageStr delegate:(id)delegate; @property (nonatomic,weak)id <SCUdpSocketDelegate> delagate; @end
// // ConningViewController.m // vdr // // Created by mijibao on 15/8/14. // Copyright (c) 2015年 jzkj. All rights reserved. // #import "ConningViewController.h" #import "ConningView.h" #import "SCUdpSocket.h" #import "CommonCore.h" @interface ConningViewController ()<SCUdpSocketDelegate> @end @implementation ConningViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. <pre name="code" class="objc"> //请求conning数据 NSString *messageStr = @"Query conning HLD_SIP/1.0\r\nDestination: 9714525\r\n\r\n"; [[SCUdpSocket shareUdpSocket]sendMessageHeader:messageStr delegate:self];
}#pragma -mark SCUdpSocketDelegate- (void)getSeverMessage:(NSDictionary *)dictionary{ NSLog(@"消息体内容 : %@",dictionary);}
@end
相关文章推荐
- 简单的thinkphp+uploadify实现上传
- [Android]仿京东手机端类别页
- EOJ 2857:编辑距离(DP)
- 八月日记
- 部署自己的私有 Docker Registry
- WCF实战开发1
- 最小覆盖点数=最大匹配数
- Cocos2d-x 获取网络图片缓存并展示
- poj 2506 Tiling(大数+规律)
- ios开发中地图和定位
- 最长有序子序列 经典DP
- 设计思想与设计模式
- hdu 4533 威威猫系列故事――晒被子(二重等差数列+差分前缀和)
- linux ssh远程登录原理及中断原理
- FFT详解
- 交换某数的奇数位和偶数位
- Java接口的特点
- C#chart之PieChart
- 华为——查分系统
- Android 中的资源访问(简介/颜色)