您的位置:首页 > 其它

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: