ios 接收 c# socket udp 组播
最近用wcf 服务 给ios和安卓做接口,做了几个ios的项目 用udp 组播 让ios多终端接收和刷新方法
做一个简单的小例子会把工程给大家下载的
c#代码:netSocketUDP.rar
ios代码:MyIOSSocketDemo.rar
先用c#做发送
组播IP范围为 224.0.0.0~239.255.255.255
建一个控制台应用程序
private static IPAddress GropuAddress = IPAddress.Parse("224.0.0.2");//IPprivate static int GrupPort = 12001;//端口static void Main(string[] args){for (int i = 0; i < 1000; i++){System.Threading.Thread.Sleep(3000);//等待3秒再发Send("sendMessage"+i.ToString()+"个!");}}public static void Send(string message){
//不在一个网段也可以收到
Socket server = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 12002);
IPEndPoint iep2 = new IPEndPoint(IPAddress.Parse("224.0.0.2"), 12001);
server.Bind(iep);
byte[] data = Encoding.ASCII.GetBytes(message);
server.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership,
new MulticastOption(IPAddress.Parse("224.100.0.1")));
server.SetSocketOption(SocketOptionLevel.IP,SocketOptionName.MulticastTimeToLive, 50);
server.SendTo(data, iep2);
server.Close();
}
顺便把c#接收也说一下(这个可以不用看,因为我们要做的是ios接收)
static void Main(string[] args){StartListener(); Console.ReadLine();}private static void StartListener(){byte[] b = new byte[10240];try{while (true){System.Threading.Thread.Sleep(500);String multiAddress = "224.0.0.2";//Datagrams.getMultiIPAddress("192.168.2.106");Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 12001);s.Bind(ipep);IPAddress ip = IPAddress.Parse(multiAddress);s.SetSocketOption(SocketOptionLevel.IP,SocketOptionName.AddMembership,new MulticastOption(ip, IPAddress.Any));s.ReceiveTimeout = 5000;s.Receive(b);string sss = System.Text.Encoding.UTF8.GetString(b).Replace("\0", "").Trim();Console.WriteLine(sss);s.Close();}}catch (Exception ex){Console.WriteLine("receive multicast exception:" + ex.ToString());}}
ios接收
ios 用到的一个类库AsyncUdpSocket 这个类库就是发送和接收收 组播的 用起来很方便网上有好多例子我就简单说一下
建一个Single View Application
把AsyncUdpSocket.h 和AsyncUdpSocket.m加到工程里
窗体上放一个文本显示收到的信息
在ViewController.h里加入
#import "AsyncUdpSocket.h"@interface ViewController : UIViewController<AsyncUdpSocketDelegate>
@property (strong, nonatomic) IBOutlet UITextField *MyResaveTxt;//页面上的文本
@property (nonatomic,strong) AsyncUdpSocket *udpSocket;
-(void)openUDPServer;
在ViewController.m 里实现
#import "ViewController.h"@interface ViewController ()@end@implementation ViewController
@synthesize udpSocket,MyResaveTxt;
- (void)viewDidLoad
{[super viewDidLoad];[self openUDPServer];// Do any additional setup after loading the view, typically from a nib.
}- (void)didReceiveMemoryWarning
{[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.
}
-(void) openUDPServer
{//初始化udpAsyncUdpSocket *tempSocket=[[AsyncUdpSocket alloc] initWithDelegate:self];self.udpSocket=tempSocket;//绑定端口NSError *error = nil;[self.udpSocket bindToPort:12001 error:&error];//发送广播设置[self.udpSocket enableBroadcast:YES error:&error];//加入群里,能接收到群里其他客户端的消息[self.udpSocket joinMulticastGroup:@"224.0.0.2" error:&error];//启动接收线程[self.udpSocket receiveWithTimeout:-1 tag:0];}
//接收
-(BOOL) onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port
{NSString * info=[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];MyResaveTxt.text=info;[self.udpSocket receiveWithTimeout:-1 tag:0];//启动接收线程return YES;
}
@end
c#代码:netSocketUDP.rar
ios代码:MyIOSSocketDemo.rar
补一下发汉字会有乱码
c#用
byte[] data =System.Text.Encoding.Default.GetBytes(message);
ios用
NSStringEncoding strEncode = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);NSString * info=[[NSString alloc] initWithData:data encoding:strEncode ];
ios URL中文转码
方法1
NSString *url =@"www.haha.com/这是中文";NSStringEncoding chineseEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);url = [url stringByAddingPercentEscapesUsingEncoding:chineseEncoding];NSLog(@"%@",url);
NSMutableURLRequest *request = [[NSMutableURLRequestalloc] init];
// 设置URL
[request setURL:[NSURL URLWithString:url]];
// 设置HTTP方法
[request setHTTPMethod:@"GET"];
// 发送同步请求, 这里得returnData就是返回得数据
NSData *data = [NSURLConnectionsendSynchronousRequest:request
returningResponse:nil error:nil];
方法2
- (NSString *)URLEncodedString{ NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)self,NULL,CFSTR("!*'();:@&=+$,/?%#[]"),kCFStringEncodingUTF8);[result autorelease];return result; }
ios 接收 c# socket udp 组播相关推荐
- UDP 组播---你需要了解这些
先来了解下UDP UDP 是UserDatagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一 ...
- UDP 组播---基本概念
本文章已收录于: 先来了解下UDP UDP 是UserDatagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式 ...
- UDP组播开发测试实例
一 前言 (1)负责项目中组播开发测试工作.期间由于缺乏设备的原因,中间搁置了好久.直到昨天下午临近下班,终于,完成udp组播整个的开发测试工作. 二 开发过程 (1)首先从实现udp协议说起.udp ...
- UDP组播调试(使用TCPUDP调试工具)
如何使用调试工具进行UDP组播调试 一.下载UDP&TCP调试工具 二.双击打开调试工具并建立端口 2.1 创建组播客户端1 类型:UDP(组播模式):目标IP:225.0.0.20:端口:6 ...
- socket(四)–组播
socket(四)–组播 文章目录 socket(四)--组播 一.简介 二.知识点 2.1 组播地址 三.关键类 3.1 java.net.MulticastSocket 3.2 java.net. ...
- 基于stm32f107 stm32cube 和 LWIP 协议实现 udp 组播通信
最近在做一个基于stm32f107 实现 UDP 组播通信的项目,项目基于 stm32cube 配置生成,如下图: UDP组播头文件: #ifndef __MULTICAST_H__ #define ...
- udp组播的应用场景
参考: <TCP/IP详解 卷一> 单播 unicast 在单播的情况下,任意两个主机的通信不会干扰网内其他主机(可能引起争夺共享信道的情况除外) 广播 有时候一个主机要向网上的所有其他主 ...
- Qt UDP组播的应用
最近学习了组播的应用.组播传输:在发送者和每一接收者之间实现点对多点网络连接.如果一台发送者同时给多个的接收者传输相同的数据,也只需复制一份的相同数据包.它能提高了效率.减少了骨干网络出现拥塞的可能性 ...
- (转)C# 使用UDP组播实现局域网桌面共享
转:http://www.cnblogs.com/mobwiz/p/3715743.html 最近需要在产品中加入桌面共享的功能,暂时不用实现远程控制:参考了园子里的一些文章,加入了一些自己的修改. ...
最新文章
- php mysql多重筛选,如何使用php、html、mysql构建一个多重分类选择列表
- 产品经理如何激发出新的创意
- 面试官让我讲下线程的TIMED_WAITING状态,我又笑了
- 【Jmeter篇】临界区控制器Critical Section Controller业务流顺序负载压测
- PG修改表owner提示must be member of role “pg13“
- 【ssm】极简的极省力的开发方式——针对简单型EasyUI的增删改查的后台管理
- 安装composer并创建laravel项目流程
- MySQL的条件判断函数
- 信息系统基础知识---企业信息化与电子商务
- 用色环图帮你搞定配色
- 对于一个小白来说,遇到的前端问题(3)
- Python技巧篇:如何巧妙运用Python处理Word文档
- Java高性能序列化工具Kryo序列化
- 易乐游装在云服务器_新手搭建云服务器详细过程
- python爬虫(20)使用真实浏览器打开网页的两种方法
- 任务的同步与通信_读书笔记_6
- [ecshop 经验 ]transport.js run error 68ecshop 小京东 火狐提示 同源策略和跨域访问 68ecshop
- html 整体缩小zoom,页面缩放兼容性处理方法(zoom,Firefox火狐浏览器)
- Hadoop运行原理之Spill, Shuffle
- 第一个ios应用(2)