iphone --CocoaAsyncSocket(2)
来源:互联网 发布:网络终端机安装方法 编辑:程序博客网 时间:2024/05/22 06:25
编写简单的UDP应用
首先,编写发送UDP数据报的示例。这需要有个服务器端能接收到内容。用Java写了个简单的接收端:
1234567891011121314
public static void main(String[] args) throws IOException { InetSocketAddress address = new InetSocketAddress("0.0.0.0", 5555); DatagramSocket datagramSocket=new DatagramSocket(address); System.out.println("start udp server"); byte[] buffer=new byte[1024]; for(;;){ DatagramPacket datagramPacket=new DatagramPacket(buffer, buffer.length); datagramSocket.receive(datagramPacket); System.out.println("receive data:"+new String(datagramPacket.getData(),0,datagramPacket.getLength())); }}
下面写发送的代码:
12345
AsyncUdpSocket *socket=[[AsyncUdpSocket alloc]initWithDelegate:self]; NSData *data=[@"Hello from iPhone" dataUsingEncoding:NSUTF8StringEncoding];[socket sendData:data toHost:@"192.168.0.165" port:5555 withTimeout:-1 tag:1];NSLog(@"send upd complete.");
执行后,在接收端成功输出如下内容:
下面,写个接收端的代码:
1234567891011
AsyncUdpSocket *socket=[[AsyncUdpSocket alloc] initWithDelegate:self]; NSError *error = nil; [socket bindToPort:5555 error:&error]; if (error) { NSLog(@"error: %@",error); } [socket receiveWithTimeout:-1 tag:1]; NSLog(@"start udp server");
另外,至少写这个delegate方法:
12345678
- (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port{ NSLog(@"received data: %@",[[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]); return YES; }
发送端,还是用java写个测试代码:
1234567
public static void main(String[] args) throws IOException { DatagramSocket datagramSocket = new DatagramSocket(); byte[] buffer = "Hello!".getBytes(); DatagramPacket datagramPacket = new DatagramPacket(buffer, buffer.length, new InetSocketAddress("192.168.0.144", 5555)); datagramSocket.send(datagramPacket); }
在iPhone日志中:
12
2011-07-20 15:23:33.571 SocketDemos[795:707] start udp server 2011-07-20 15:23:47.395 SocketDemos[795:707] received data: Hello
收到了数据报。
使用UDP发送和接收组播
这里主要关注的是接收,一方面是需求上要求,另一方面,碰到过Android Wifi获取组播问题,担心iOS也有类似的机制。后来测试发现没有那么麻烦(打开组播锁)。
为了测试,还是用java编写了个发送UDP广播的简单代码:
123456789
public static void main(String[] args) throws IOException { int port=3333; MulticastSocket socket=new MulticastSocket(port); InetAddress address=InetAddress.getByName("239.0.0.1"); socket.joinGroup(address); byte[] data="Hello everyone.".getBytes(); DatagramPacket datagramPacket=new DatagramPacket(data,data.length,address,port); socket.send(datagramPacket); System.out.println("send ok.");
编写的iOS代码:
12345678910111213
AsyncUdpSocket *socket=[[AsyncUdpSocket alloc] initWithDelegate:self]; NSError *error = nil; [socket bindToPort:3333 error:&error]; [socket enableBroadcast:YES error:&error]; [socket joinMulticastGroup:@"239.0.0.1" error:&error]; if (error) { NSLog(@"error: %@",error); } [socket receiveWithTimeout:-1 tag:1]; NSLog(@"start udp server");
delegate和上面接收普通UDP一模一样:
12345678
- (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port{ NSLog(@"received data: %@",[[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]); return YES;}
测试得到的日志:
12
2011-07-20 16:14:30.338 SocketDemos[860:707] start udp server 2011-07-20 16:14:42.829 SocketDemos[860:707] received data: Hello everyone.
说明是收到了。
发送组播和前面的UDP发送类似,只是多了要做join group的操作。这里就不多说了。
- iphone --CocoaAsyncSocket(2)
- iphone --CocoaAsyncSocket(1)
- iphone开源网络编程cocoaasyncsocket
- iphone开源网络编程cocoaasyncsocket
- iphone开源网络编程cocoaasyncsocket
- iphone开源网络编程cocoaasyncsocket
- CocoaAsyncSocket
- CocoaAsyncSocket
- CocoaAsyncSocket
- CocoaAsyncSocket
- CocoaAsyncSocket
- CocoaAsyncSocket
- CocoaAsyncSocket 文档2:常见陷阱
- iOS进阶2 -- CocoaAsyncSocket和Websocket框架使用
- CocoaAsyncSocket学习
- CocoaAsyncSocket学习
- CocoaAsyncSocket学习
- CocoaAsyncSocket学习
- Hadoop使用常见问题以及解决方法
- 何时调用构造函数和析构函数
- 开源日志系统log4cplus
- 通常IT创业可以有7种盈利方式
- .Net 程序第一次运行比较慢的原因
- iphone --CocoaAsyncSocket(2)
- 使用x-webkit-speech令网站支持语音输入功能
- Android权限机制总结与常见权限不足问题分析
- 在UIMenuController出现的时候取得选中的数据
- 封闭开发是为何? .
- Android版本检测/自动更新
- 《人月神话》阅读笔记
- content assist !!!
- 手机语音助手(android)