一:前言(本文為UDP服務(wù)端)
UDP客戶端直接可以根據(jù)服務(wù)端的IP地址和端口號(hào)去發(fā)送數(shù)據(jù) 服務(wù)端收到客戶端數(shù)據(jù)之后會(huì)得到這個(gè)客戶端的IP地址和端口號(hào) 根據(jù)這個(gè)IP地址和端口號(hào)服務(wù)端才能知道給哪個(gè)客戶端發(fā)送消息
二:代碼在GitHub
1.部分代碼及其截圖
<1>創(chuàng)建UDP-Scoket
serverSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()] ;
NSError *bindError = nil;
[serverSocket bindToPort:8099 error:&bindError];
[serverSocket enableBroadcast:YES error:&bindError];//允許廣播 必須 否則后面無法發(fā)送組播和廣播
NSError *receiveError = nil;
[serverSocket joinMulticastGroup:@"224.0.0.1" error:nil];
[serverSocket beginReceiving:&receiveError];//開始接收數(shù)據(jù)
<2>向客戶端發(fā)送數(shù)據(jù)
//發(fā)送數(shù)據(jù)給客戶端 host1和port1分別為客戶端的IP地址和端口號(hào)(在UDP的代理方法中可以得到當(dāng)前客戶端的IP地址和端口號(hào))
[serverSocket sendData:[@"123" dataUsingEncoding:NSUTF8StringEncoding] toHost:host1 port:port1 withTimeout:-1 tag:0];
<3>UDP代理
//udpsocket的關(guān)鍵回調(diào)方法:接收到客戶端socket發(fā)送的消息響應(yīng)如下
- (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data fromAddress:(NSData *)address withFilterContext:(id)filterContext {
NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
NSString *host = nil;
uint16_t port = 0;
//得到客戶端的IP地址和端口號(hào)
[GCDAsyncUdpSocket getHost:&host port:&port fromAddress:address];
host1 = host;
port1 = port;
}