QQ20160623-0.png (141.43 KB, 下载次数: 1531)
下载附件 保存到相册
7 年前 上传
QQ20160623-1.png (218.31 KB, 下载次数: 1500)
// 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, 下载次数: 1449)
QQ20160623-3.png (137.74 KB, 下载次数: 1431)
QQ20160623-4.png (156.78 KB, 下载次数: 1425)
来源:即时通讯网 - 即时通讯开发者社区!
轻量级开源移动端即时通讯框架。
快速入门 / 性能 / 指南 / 提问
轻量级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地址(或域名)
引用:dsperson 发表于 2017-07-26 09:51 楼主 大大 我想问 UDP , 一定要采用 P2P吗? 如果是必须采用 如何给服务器发送自己的公网IP呢?
引用:dsperson 发表于 2017-07-26 14:50 耐心看完了一遍 但是代码 搞不出来 很烦 .请问你的MobileSDK那个我看了源码, 貌似没有用到P2P技术.如果用 ...
引用:dsperson 发表于 2017-07-26 16:03 我们这边 定下来了 要用p2p. 我很忧伤 大大 给我点iOS 的demo 资料吧 .. 还有UDP 发送图片语音断包处理什 ...
引用:Jun_X 发表于 2017-12-29 15:27 对于没学过java的来说,server端代码有挑战性
引用:Tina 发表于 2019-03-12 14:53 大神,请问现在用MINA做IM项目还值得吗,公司负责人说用MINA做,但是我看您另一篇文章里面都没有提到这个( ...
引用:逍遥红鹰 发表于 2020-12-17 16:30 请问楼主,GCDAsyncSocket是实现异步消息的,同步消息的用什么实现?安卓端的CIM,netty可以实现同步消息, ...
引用:逍遥红鹰 发表于 2020-12-17 17:37 现在的需求是,创建群聊走同步的或者走接口,安卓的netty客户端可以利用线程锁走同步,iOS的没找到解决办 ...
精华主题数超过100个。
连续任职达2年以上的合格正式版主
为论区做出突出贡献的开发者、版主等。
Copyright © 2014-2024 即时通讯网 - 即时通讯开发者社区 / 版本 V4.4
苏州网际时代信息科技有限公司 (苏ICP备16005070号-1)
Processed in 0.140622 second(s), 36 queries , Gzip On.