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" ); //IP
         private  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
{
     //初始化udp
     AsyncUdpSocket *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);<br><br>

    NSMutableURLRequest *request = [[NSMutableURLRequestallocinit];

            // 设置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;
 
}

  本文转自lpxxn博客园博客,原文链接:http://www.cnblogs.com/li-peng/archive/2012/11/21/2780647.html,如需转载请自行联系原作者

相关文章
|
2月前
|
C# 开发者
C# 一分钟浅谈:Socket 编程基础
【10月更文挑战第7天】本文介绍了Socket编程的基础知识、基本操作及常见问题,通过C#代码示例详细展示了服务器端和客户端的Socket通信过程,包括创建、绑定、监听、连接、数据收发及关闭等步骤,帮助开发者掌握Socket编程的核心技术和注意事项。
93 3
C# 一分钟浅谈:Socket 编程基础
|
2月前
|
消息中间件 网络协议 C#
C#使用Socket实现分布式事件总线,不依赖第三方MQ
`CodeWF.EventBus.Socket` 是一个轻量级的、基于Socket的分布式事件总线系统,旨在简化分布式架构中的事件通信。它允许进程之间通过发布/订阅模式进行通信,无需依赖外部消息队列服务。
C#使用Socket实现分布式事件总线,不依赖第三方MQ
|
2月前
|
网络协议 网络性能优化 C#
C# 一分钟浅谈:UDP 与 TCP 协议区别
【10月更文挑战第8天】在网络编程中,传输层协议的选择对应用程序的性能和可靠性至关重要。本文介绍了 TCP 和 UDP 两种常用协议的基础概念、区别及应用场景,并通过 C# 代码示例详细说明了如何处理常见的问题和易错点。TCP 适用于需要可靠传输和顺序保证的场景,而 UDP 适用于对延迟敏感且可以容忍一定数据丢失的实时应用。
40 1
|
2月前
|
网络协议 Linux 网络性能优化
Linux基础-socket详解、TCP/UDP
综上所述,Linux下的Socket编程是网络通信的重要组成部分,通过灵活运用TCP和UDP协议,开发者能够构建出满足不同需求的网络应用程序。掌握这些基础知识,是进行更复杂网络编程任务的基石。
127 1
|
7月前
|
网络协议 Java
Java的Socket编程:TCP/IP与UDP深入探索
Java的Socket编程:TCP/IP与UDP深入探索
107 0
|
4月前
|
Java
java网络编程 UDP通信协议实现局域网内文件的发送和接收
java网络编程 UDP通信协议实现局域网内文件的发送和接收
java网络编程 UDP通信协议实现局域网内文件的发送和接收
|
3月前
|
网络协议 Linux
TCP 和 UDP 的 Socket 调用
【9月更文挑战第6天】
|
6月前
|
存储 网络协议 数据处理
【Socket】解决UDP丢包问题
UDP(用户数据报协议)是一种无连接的传输层协议,因其不保证数据包的顺序到达和不具备内置重传机制,导致在网络拥塞、接收缓冲区溢出或发送频率过快等情况下容易出现丢包现象。为应对这些问题,可以在应用层实现重传机制、使用前向纠错码等方法。这些方法在一定程度上可以缓解UDP通信中的丢包问题,提高数据传输的可靠性和效率。
|
6月前
|
网络协议 应用服务中间件 网络性能优化
解析TCP /UDP协议的 socket 调用的过程
【6月更文挑战第2天】该文介绍了传输层的两种主要协议TCP和UDP的区别。TCP是面向连接、可靠的,提供顺序无错的数据传输,而UDP则是无连接、不可靠的,不保证数据顺序或不丢失。
|
6月前
用UDP协议实现发送接收的网络聊天室
用UDP协议实现发送接收的网络聊天室
40 0