日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

编写简单的UDP应用

發(fā)布時(shí)間:2024/1/17 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编写简单的UDP应用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

編寫(xiě)簡(jiǎn)單的UDP應(yīng)用

首先,編寫(xiě)發(fā)送UDP數(shù)據(jù)報(bào)的示例。這需要有個(gè)服務(wù)器端能接收到內(nèi)容。用Java寫(xiě)了個(gè)簡(jiǎn)單的接收端:

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()));
??? }
}



下面寫(xiě)發(fā)送的代碼:

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.");



執(zhí)行后,在接收端成功輸出如下內(nèi)容:


下面,寫(xiě)個(gè)接收端的代碼:

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");

另外,至少寫(xiě)這個(gè)delegate方法:

- (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;
}



發(fā)送端,還是用java寫(xiě)個(gè)測(cè)試代碼:

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日志中:

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!

收到了數(shù)據(jù)報(bào)。



使用UDP發(fā)送和接收組播

這里主要關(guān)注的是接收,一方面是需求上要求,另一方面,碰到過(guò)Android Wifi獲取組播問(wèn)題,擔(dān)心iOS也有類似的機(jī)制。后來(lái)測(cè)試發(fā)現(xiàn)沒(méi)有那么麻煩(打開(kāi)組播鎖)。

為了測(cè)試,還是用java編寫(xiě)了個(gè)發(fā)送UDP廣播的簡(jiǎn)單代碼:

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.");



編寫(xiě)的iOS代碼:

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一模一樣:

- (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;
}



測(cè)試得到的日志:

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.

說(shuō)明是收到了。

發(fā)送組播和前面的UDP發(fā)送類似,只是多了要做join group的操作。這里就不多說(shuō)了。

?

?

?

社區(qū)原帖:http://www.cocoachina.com/bbs/read.php?tid=125575&fpage=3

轉(zhuǎn)載于:https://www.cnblogs.com/zhuchangsheng/p/5681974.html

總結(jié)

以上是生活随笔為你收集整理的编写简单的UDP应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。