- 首先需要安装一个TCP&UDP测试工具
- 连接类型选择UDP
- 目标IP 设置手机的IP, 端口8888 (这个端口在App端用来绑定)
- 指定端口, 是App向回发信息所需要的端口, 具体设置如下图所示
接下来为减少代码的键入, 我直接使用CocoaAsyncSocket这个三方库,作为中间媒介完成整个过程
{
GCDAsyncUdpSocket *udpSocket; // 定义一个socket的对象 签订代理 GCDAsyncUdpSocketDelegate
}
麦 2017/7/20 17:05:40
/*************** UDP ***********************/
udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];
NSError *error = nil;
// 绑定端口
[udpSocket bindToPort:8888 error:&error];
// 启用广播
[udpSocket enableBroadcast:YES error:&error];
if (error) {
[SVProgressHUD showErrorWithStatus:@"启用失败"];
}else {
NSLog(@"%@", [udpSocket localHost]);
// 开始接收消息
[udpSocket beginReceiving:&error];
}
/*************** UDP ***********************/
#pragma mark - GCDAsyncUdpSocketDelegate
- (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data fromAddress:(NSData *)address withFilterContext:(nullable id)filterContext {
NSLog(@"success");
NSString *ip = [GCDAsyncUdpSocket hostFromAddress:address];
NSString *s = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"收到响应 %@ %@", ip, s);
[sock receiveOnce:nil];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
uint16_t port = 9999;
[self sendBackToHost:ip port:port withMessage:s];
});
}
- (void)sendBackToHost:(NSString *)ip port:(uint16_t)port withMessage:(NSString *)s{
// 回一个 hello summerxx too
char *str = "hello summerxx too" ;
NSData *data = [NSData dataWithBytes:str length:strlen(str)];
[udpSocket sendData:data toHost:ip port:port withTimeout:0.1 tag:200];
}
作者:sinat_30162391 发表于2017/7/20 23:21:20 原文链接
阅读:189 评论:0 查看评论