程序员

iOS-基于UDP连接<Scoket-服务端>

2017-01-10  本文已影响164人  学_iOS

一:前言(本文为UDP服务端)

UDP客户端直接可以根据服务端的IP地址和端口号去发送数据 服务端收到客户端数据之后会得到这个客户端的IP地址和端口号 根据这个IP地址和端口号服务端才能知道给哪个客户端发送消息

二:代码在GitHub

1.部分代码及其截图

<1>创建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];//允许广播 必须 否则后面无法发送组播和广播
    
    NSError *receiveError = nil;
    
    [serverSocket joinMulticastGroup:@"224.0.0.1" error:nil];
    
    [serverSocket beginReceiving:&receiveError];//开始接收数据

<2>向客户端发送数据

    //发送数据给客户端  host1和port1分别为客户端的IP地址和端口号(在UDP的代理方法中可以得到当前客户端的IP地址和端口号)
    [serverSocket sendData:[@"123" dataUsingEncoding:NSUTF8StringEncoding] toHost:host1 port:port1 withTimeout:-1 tag:0];

<3>UDP代理

//udpsocket的关键回调方法:接收到客户端socket发送的消息响应如下
- (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地址和端口号
    [GCDAsyncUdpSocket getHost:&host port:&port fromAddress:address];
    host1 = host;
    port1 = port;
}
上一篇下一篇

猜你喜欢

热点阅读