QQ20160623-0.png (141.43 KB, 下载次数: 2811)
下载附件 保存到相册
8 年前 上传
QQ20160623-1.png (218.31 KB, 下载次数: 2819)
// Copyright (C) 2016 即时通讯网(52im.net)- 即时通讯开发者社区. // All rights reserved. // Created by JackJiang on 16/06/22. #import "ViewController.h" #import "LocalUDPSocketProvider.h" #import "LocalUDPDataSender.h" #import "CharsetHelper.h" #import "UDPUtils.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // 初始化socket [[LocalUDPSocketProvider sharedInstance] initialLocalUDPSocket]; // 注意:执行延迟的单位是秒哦 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(doSend) userInfo:nil repeats:YES]; [timer fire]; } - (void)doSend { NSString *toServer = [NSString stringWithFormat:@"Hi,我是iOS客户端,我的时间戳 %li",[UDPUtils getTimeStampWithMillisecond_l]]; [[LocalUDPDataSender sharedInstance] send:[CharsetHelper getBytesWithString:toServer]]; } @end
// Copyright (C) 2016 即时通讯网(52im.net)- 即时通讯开发者社区. // All rights reserved. // Created by JackJiang on 16/06/22. #import "LocalUDPSocketProvider.h" #import "GCDAsyncUdpSocket.h" #import "ConfigEntity.h" #import "CompletionDefine.h" @interface LocalUDPSocketProvider () @property (nonatomic, retain) GCDAsyncUdpSocket *localUDPSocket; @property (nonatomic, copy) ConnectionCompletion connectionCompletionOnce_; @end @implementation LocalUDPSocketProvider // 本类的单例对象 static LocalUDPSocketProvider *instance = nil; + (LocalUDPSocketProvider *)sharedInstance { if (instance == nil) instance = [[super allocWithZone:NULL] init]; return instance; } - (GCDAsyncUdpSocket *)initialLocalUDPSocket { NSLog(@"【IMCORE】new GCDAsyncUdpSocket中..."); // ** Setup our socket. self.localUDPSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; // ** START udp socket // 本地绑定端口合法性检查 int port = [ConfigEntity getLocalUdpSendAndListeningPort]; if (port < 0 || port > 65535) port = 0; NSError *error = nil; // 绑定到指定端口(以便收发数据) if (![self.localUDPSocket bindToPort:port error:&error]) { NSLog(@"【IMCORE】localUDPSocket创建时出错,原因是 bindToPort: %@", error); return nil; } // 开启收数据处理 if (![self.localUDPSocket beginReceiving:&error]) { NSLog(@"【IMCORE】localUDPSocket创建时出错,原因是 beginReceiving: %@", error); return nil; } NSLog(@"【IMCORE】localUDPSocket创建已成功完成."); return self.localUDPSocket; } 。。。。。。 - (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data fromAddress:(NSData *)address withFilterContext:(id)filterContext { NSString *msg = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; if (msg) NSLog(@"【UDP_SOCKET】【NOTE】>>>>>> 收到服务端的消息: %@", msg); else { NSString *host = nil; uint16_t port = 0; [GCDAsyncUdpSocket getHost:&host port:&port fromAddress:address]; NSLog(@"【UDP_SOCKET】RECV: Unknown message from: %@:%hu", host, port); } } - (void)udpSocket:(GCDAsyncUdpSocket *)sock didConnectToAddress:(NSData *)address { NSLog(@"【UDP_SOCKET】成收到的了UDP的connect反馈, isCOnnected?%d", [sock isConnected]); // 连接结果回调 if(self.connectionCompletionOnce_ != nil) self.connectionCompletionOnce_(YES); } - (void)udpSocket:(GCDAsyncUdpSocket *)sock didNotConnect:(NSError *)error { NSLog(@"【UDP_SOCKET】成收到的了UDP的connect反馈,但连接没有成功, isCOnnected?%d", [sock isConnected]); // 连接结果回调 if(self.connectionCompletionOnce_ != nil) self.connectionCompletionOnce_(NO); } @end
// Copyright (C) 2016 即时通讯网(52im.net)- 即时通讯开发者社区. // All rights reserved. // Created by JackJiang on 16/06/22. #import "LocalUDPDataSender.h" #import "CharsetHelper.h" #import "GCDAsyncUdpSocket.h" #import "LocalUDPSocketProvider.h" #import "ConfigEntity.h" #import "UDPUtils.h" #import "CompletionDefine.h" @implementation LocalUDPDataSender // 本类的单例对象 static LocalUDPDataSender *instance = nil; - (BOOL) send:(NSData *)dataWithBytes { // 获得UDPSocket实例 GCDAsyncUdpSocket *ds = [[LocalUDPSocketProvider sharedInstance] getLocalUDPSocket]; // 确保发送数据开始前,已经进行connect的操作:如果Socket没有“连接”上服务端,尝试“连接”一次 if(ds != nil && ![ds isConnected]) { // 此次数据只在“连接”成功后发出,“连接”成功则会调用此回调block代码 ConnectionCompletion observerBlock = ^(BOOL connectResult) { // 成功建立了UDP连接后就把包发出去 if(connectResult) [UDPUtils sendImpl:ds withData:dataWithBytes]; }; // 调置连接回调 [[LocalUDPSocketProvider sharedInstance] setConnectionObserver:observerBlock]; NSError *connectError = nil; BOOL connectResult = [[LocalUDPSocketProvider sharedInstance] tryConnectToHost:&connectError withSocket:ds completion:observerBlock]; // 如果连接意图没有成功发出则返回错误码 return connectResult; } else return [UDPUtils sendImpl:ds withData:dataWithBytes]; } // 获取本类的单例。使用单例访问本类的所有资源是唯一的合法途径。 + (LocalUDPDataSender *)sharedInstance { if (instance == nil) instance = [[super allocWithZone:NULL] init]; return instance; } @end
QQ20160624-0.png (506.49 KB, 下载次数: 2782)
QQ20160623-3.png (137.74 KB, 下载次数: 2779)
QQ20160623-4.png (156.78 KB, 下载次数: 2715)
来源:即时通讯网 - 即时通讯开发者社区!
轻量级开源移动端即时通讯框架。
快速入门 / 性能 / 指南 / 提问
轻量级Web端即时通讯框架。
详细介绍 / 精编源码 / 手册教程
移动端实时音视频框架。
详细介绍 / 性能测试 / 安装体验
基于MobileIMSDK的移动IM系统。
详细介绍 / 产品截图 / 安装体验
一套产品级Web端IM系统。
详细介绍 / 产品截图 / 演示视频
引用此评论
引用:719967870 发表于 2016-07-25 17:14 怎么下载不来哦
引用:wyd1610712520 发表于 2016-10-11 09:54 辛苦了,适合我这种彩笔
引用:zenghl 发表于 2017-02-06 14:24 2017-02-06 14:23:56.609 ios_echo_client_udp[4455:446907] 【UDP_SOCKET】tag为0的NSData已成功发出. 20 ...
引用:ashura12342000 发表于 2017-05-02 20:41 #import "ConfigEntity.h" // 服务端ip地址(或域名)
精华主题数超过100个。
连续任职达2年以上的合格正式版主
为论区做出突出贡献的开发者、版主等。
连续任职达3个月以上的合格正式版主
Copyright © 2014-2024 即时通讯网 - 即时通讯开发者社区 / 版本 V4.4
苏州网际时代信息科技有限公司 (苏ICP备16005070号-1)
Processed in 0.187500 second(s), 45 queries , Gzip On.