ios UDP组播

这几天在做wifi的智能灯,需要用到组播的知识就把这个记录一下,服务端使用java写的,代码如下:

 1 import java.io.IOException;
 2 import java.net.DatagramPacket;
 3 import java.net.DatagramSocket;
 4 import java.net.InetAddress;
 5 import java.net.MulticastSocket;
 6
 7  class UDPServer{
 8     public static void main(String[] args)throws IOException{
 9         MulticastSocket  server = new MulticastSocket(5050);
10         InetAddress address = InetAddress.getByName("224.0.0.1");
11         server.joinGroup(address);
12
13
14         byte[] recvBuf = new byte[100];
15         DatagramPacket recvPacket
16             = new DatagramPacket(recvBuf , recvBuf.length);
17
18         while(true)
19         {
20
21         server.receive(recvPacket);
22         String recvStr = new String(recvPacket.getData() , 0 , recvPacket.getLength());
23         System.out.println("Hello World!" + recvStr);
24         int port = recvPacket.getPort();
25         InetAddress addr = InetAddress.getByName("224.0.0.1");
26         String sendStr = "Hello ! I‘m Server";
27         byte[] sendBuf;
28         sendBuf = sendStr.getBytes();
29         DatagramPacket sendPacket
30             = new DatagramPacket(sendBuf , sendBuf.length , addr , port );
31         server.send(sendPacket);
32         }
33
34
35
36     }
37
38 }

ios端的主要代码:

 1 #import "UdpHelper.h"
 2
 3 @implementation UdpHelper {
 4     AsyncUdpSocket* m_udpSocket;
 5 }
 6
 7 + (UdpHelper*)getinstance
 8 {
 9
10     static UdpHelper* udpHelper = nil;
11
12     static dispatch_once_t onceToken;
13     dispatch_once(&onceToken, ^{
14             udpHelper = [[self alloc] init];
15
16         [udpHelper openUDPServer];
17     });
18
19     return udpHelper;
20 }
21
22 - (void)openUDPServer
23 {
24     AsyncUdpSocket* tempSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];
25     m_udpSocket = tempSocket;
26
27     NSError* error = nil;
28     [m_udpSocket bindToPort:5051 error:&error];
29     [m_udpSocket joinMulticastGroup:@"224.0.0.1" error:&error];
30
31     [m_udpSocket receiveWithTimeout:-1 tag:0];
32 }
33
34 - (void)sendMessage:(NSString*)message
35 {
36     NSMutableString* sendString = [NSMutableString stringWithCapacity:100];
37     [sendString appendString:message];
38
39     BOOL res = [m_udpSocket sendData:[sendString dataUsingEncoding:NSUTF8StringEncoding]
40                               toHost:@"224.0.0.1"
41                                 port:5050
42                          withTimeout:-1
43                                  tag:0];
44
45     NSLog(@"%@", sendString);
46     if (res) {
47         NSLog(@"xxxxffff");
48     }
49     else {
50         NSLog(@"error");
51     }
52 }
53
54 - (BOOL)onUdpSocket:(AsyncUdpSocket*)sock didReceiveData:(NSData*)data withTag:(long)tag fromHost:(NSString*)host port:(UInt16)port
55 {
56     NSLog(@"onUdpSocket successful");
57
58     NSString* str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
59
60     NSLog(@"%@", str);
61
62     return YES;
63 }
64
65 - (void)onUdpSocket:(AsyncUdpSocket*)sock didNotSendDataWithTag:(long)tag dueToError:(NSError*)error
66 {
67     NSLog(@"error1");
68 }
69
70 - (void)onUdpSocket:(AsyncUdpSocket*)sock didNotReceiveDataWithTag:(long)tag dueToError:(NSError*)error
71 {
72     NSLog(@"error2");
73 }
74
75 @end

以上的代码就可以实现两端互发消息通信,代码也主要是借鉴了一些别人的

时间: 2024-10-18 08:55:42

ios UDP组播的相关文章

UDP 组播/多播实现步骤

UDP组播 实现服务器对客户端分组播放(发送数据). 实现步骤: server.c 1.创建服务器套接字 #include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol);   返回套接字 2.构建服务器地址结构 struct sockaddr_in serveraddr; #include <strings.h> bzero(&server

Linux统系统开发12 Socket API编程3 TCP状态转换 多路IO高并发select poll epoll udp组播 线程池

[本文谢绝转载原文来自http://990487026.blog.51cto.com] Linux统系统开发12 Socket API编程3 TCP状态转换 多路IO高并发select  poll  epoll udp组播 线程池 TCP 11种状态理解: 1,客户端正常发起关闭请求 2,客户端与服务端同时发起关闭请求 3,FIN_WAIT1直接转变TIME_WAIT 4,客户端接收来自服务器的关闭连接请求 多路IO转接服务器: select模型 poll模型 epoll模型 udp组播模型 线

JAVA实现UDP组播聊天程序

分类: Java 一.实验环境 编程语言:Java1.5(运行在JVM(Java Virsual Machine)) 开发工具:eclipce3.2 测试环境:局域网 二.实验目的 社会已经进入信息时代,网络技术在飞速发展.大量应用都依赖于从一个主机向多个主机或者从多个主机向多个主机发送同一信息的能力,在Internet上分布的数目可能达数十万台,这些都需要更高的带宽,并且大大超出了单播的能力.一种能最大限度地利用现有带宽的重要技术是IP组播. 三.组播聊天程序的实现: /** * 该程序实现了

Android对UDP组播接收数据的有限支持(一)

最近,想做一个跨平台的局域网的文件传输软件,思路是组播设备信息,TCP连接传输文件.于是进行了一次简单的UDP组播测试,发现Android对于UDP组播接收数据的支持即极为有限. 部分代码如下 1 package com.hsocket.Udp; 2 3 import java.io.IOException; 4 import java.net.DatagramPacket; 5 import java.net.DatagramSocket; 6 7 public class UdpReceiv

C# 使用UDP组播实现局域网桌面共享

最近需要在产品中加入桌面共享的功能,暂时不用实现远程控制:参考了园子里的一些文章,加入了一些自己的修改. 需求:将一台机器的桌面通过网络显示到多个客户端的屏幕上,显示内容可能为PPT,Word文档之类的内容,不含视频. 1)抓屏 参考了网上找到的一段代码如下 static BitmapSource CopyScreen() { using (var screenBmp = new Bitmap((int)SystemParameters.PrimaryScreenWidth, (int)Syst

(转)C# 使用UDP组播实现局域网桌面共享

转:http://www.cnblogs.com/mobwiz/p/3715743.html 最近需要在产品中加入桌面共享的功能,暂时不用实现远程控制:参考了园子里的一些文章,加入了一些自己的修改. 需求:将一台机器的桌面通过网络显示到多个客户端的屏幕上,显示内容可能为PPT,Word文档之类的内容,不含视频. 1)抓屏 参考了网上找到的一段代码如下 static BitmapSource CopyScreen() { using (var screenBmp = new Bitmap((int

QT的UDP组播技术

一 UDP介绍 UDP是一种简单轻量级的传输层协议,提供无连接的,不可靠的报文传输.适合下面4种情况: 网络数据大多为短消息. 拥有大量客户端. 对数据安全性无特殊要求 网络负担非常重,但对响应速度要求高. 二 基于udp协议的c/s编程模型(广播),组播的话,明天再看. 客户端: class Sender : public QObject { Q_OBJECT //可以使用信号和槽 public: explicit Sender(QObject *parent = 0); ~Sender();

UDP组播相关

Windows服务端 #include "stdafx.h" #include <winsock2.h> #include <ws2tcpip.h> #include <stdio.h> #include <stdlib.h> #define MCASTADDR "239.255.255.239" //本例使用的多播组地址. #define MCASTPORT 9111 //绑定的本地端口号. #define BUFS

QT Udp组播(穿透)

http://blog.csdn.net/victoryknight/article/details/7814243 主题 UDPQt路由器 局域网内的两台机器如果隔有路由器,那么这两台机器之间不能进行广播通信,但是我们可以换成组播的通信的方式,达到相互通信的效果. 一 服务器端 QUdpSocket udp_socket; udp_socket.bind(QHostAddress::Any, udp_listen_port, QUdpSocket::ReuseAddressHint); QHo