iPhone:Bonjour NSNetService IP 地址和端口

2023-12-26

请原谅我的 iPhone/Objective-C 新手身份!

我已经使用 NSNetServiceBrowser 找到了我的 HTTP 服务器,但现在我只想找到该服务的 IP 地址和端口。

我的委托方法中有类似以下内容的内容:

NSNetService* server = [serverBrowser.servers objectAtIndex:0];

NSString            *name = nil;
NSData              *address = nil;
struct sockaddr_in  *socketAddress = nil;
NSString            *ipString = nil;
int                 port;
uint                 i;
for (i = 0; i < [[server addresses] count]; i++)
{
    name = [server name];
    address = [[server addresses] objectAtIndex:i];
    socketAddress = (struct sockaddr_in *)
    [address bytes];
    ipString = [NSString stringWithFormat: @"%s",
                inet_ntoa (socketAddress->sin_addr)];
    port = socketAddress->sin_port;
    NSLog(@"Server found is %s %d",ipString,port);
}

但即使调用委托,也永远不会进入 for 循环。有任何想法吗?谢谢!


我意识到这是一个旧线程,但我也刚刚遇到过这个。上面的代码有几个问题:

  1. 它不了解 IPv6。在一个 至少,它应该检测并 如果剩余的 IPv6 地址被丢弃 您的应用程序只能处理 v4 地址,但理想情况下你应该是 准备传递两个地址 上游的家庭。

  2. 端口分配将 为英特尔生成不正确的值 处理器。你需要使用htons解决这个问题。

  3. 正如安德鲁上面指出的, 迭代应该使用增强的 for 循环。

  4. (编辑:添加了这一点)正如另一个相关线程中所述,使用inet_ntoa不鼓励赞成inet_ntop.

将所有这些放在一起,您将得到:

char addressBuffer[INET6_ADDRSTRLEN];

for (NSData *data in self.addresses)
{
    memset(addressBuffer, 0, INET6_ADDRSTRLEN);

    typedef union {
        struct sockaddr sa;
        struct sockaddr_in ipv4;
        struct sockaddr_in6 ipv6;
    } ip_socket_address;

    ip_socket_address *socketAddress = (ip_socket_address *)[data bytes];

    if (socketAddress && (socketAddress->sa.sa_family == AF_INET || socketAddress->sa.sa_family == AF_INET6))
    {
        const char *addressStr = inet_ntop(
                socketAddress->sa.sa_family,
                (socketAddress->sa.sa_family == AF_INET ? (void *)&(socketAddress->ipv4.sin_addr) : (void *)&(socketAddress->ipv6.sin6_addr)),
                addressBuffer,
                sizeof(addressBuffer));

        int port = ntohs(socketAddress->sa.sa_family == AF_INET ? socketAddress->ipv4.sin_port : socketAddress->ipv6.sin6_port);

        if (addressStr && port)
        {
            NSLog(@"Found service at %s:%d", addressStr, port);
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iPhone:Bonjour NSNetService IP 地址和端口 的相关文章

  • iPhone 应用程序在首次 Facebook Connect 授权/登录后崩溃

    我一直在到处寻找答案 但找不到 问题是 我有一个 iPhone 应用程序 在 AppStore 上 它使用脸书 iPhone SDK https github com facebook facebook iphone sdk 我使用 SDK
  • 当 UITextField 已满或空时显示警报 Swift

    下面的代码中 如果 userNameTF 或 passwordTF 已满或为空 则会显示警报 IBAction func LoginBtn sender AnyObject let userName userNameTF text let
  • 使用 Interface Builder 创建 UIScrollView 的步骤

    我正在尝试使用 UIScrollView 但似乎有一些基本的事情我不理解 假设我想在我的 iPhone 应用程序中使用 UIScrollView 我有一个充满按钮的视图 尺寸为 320x700 显然 这对于 320x480 的 iPhone
  • UIScrollView - 启用分页后,我可以“更改”页面宽度吗?

    将滚动视图 将 pagingEnabled 设置为 YES 将页面宽度设置为滚动视图边界以外的其他值的最简单方法是什么 让我举个例子 假设我有一个包含 10 个项目的滚动视图 每个项目的宽度为 150 像素 而我的滚动视图的宽度为 300
  • iphone NSDate 转换问题

    在我的 facebook 图表 Api 中 我正在获取这些数据 来自杰森 updated time 2011 05 17T14 52 16 0000 我正在使用此代码将其转换为有效的日期格式 NSDateFormatter df NSDat
  • 来自 iPhone/iPad 的 json Web 服务

    有人可以帮助我解决如何从 iphone 或 ipad 使用 json Web 服务的问题吗 这里我的要求是使用 API 密钥实现 json webservice 如果可能的话发布一些教程或示例链接 谢谢 规范的 JSON 处理库是here
  • 为什么 iPhone 上的纹理图像需要具有二维幂?

    我正在尝试解决 iPhone 上的闪烁问题 open gl es game 我有一些没有 2 维的图像 我将用具有适当尺寸的图像替换它们 但为什么尺寸需要是 2 的幂 大多数系统 甚至许多现代显卡 需要 2 的幂纹理的原因是 mipmap
  • UIWebView Bug:-[UIWebView cut:]:无法识别的选择器发送到实例

    In the UIWebView 如果包含文本的输入元素具有焦点 并且按下按钮导致输入失去焦点 则随后双击输入以重新获得焦点并从出现的弹出栏中选择 剪切 或 复制 或 粘贴 会导致这UIWebView因错误而崩溃 UIWebView cut
  • CGImage/UIImage 在 UI 线程上延迟加载会导致卡顿

    我的程序显示一个水平滚动表面 从左到右平铺有 UIImageViews 代码在 UI 线程上运行 以确保新可见的 UIImageView 分配有新加载的 UIImage 加载发生在后台线程上 一切工作几乎都很好 除了每个图像变得可见时出现口
  • 在 swift3 中结合平移、alpha 和缩放动画

    我是 iOS Swift 开发的新手 我尝试将三个参数组合在一个动画中 但没有成功 我认为解决方案就在这里 Apple Dev Core 动画编程指南 https developer apple com library content do
  • 如何测试 UITextField 是否为零?

    我正在尝试制作我的应用程序的一部分 如果该人不更改我的 UITextField 中的空白文本 那么他 她将无法继续下一步 基本上 我想测试 UITextField 的 nil 文本 我已经使用了 if text 方法 但是如果用户单击 UI
  • 我如何获取用户的电子邮件? iPhone SDK

    我需要获取 Mail app 中使用的用户的电子邮件地址 如何使用 iPhone SDK 做到这一点 谢谢你 简短的回答 你不能 如果需要 您应该提示用户输入电子邮件地址
  • 在运行时获取 iPhone 应用程序的产品名称?

    如何才能实现这一目标 我想获取名称 以便可以在应用程序中显示它 当然 每次更改名称时不必在代码中更改它 Try this NSBundle bundle NSBundle mainBundle NSDictionary info bundl
  • 仅将 UIImage 移动到另一个 UIImage 内部

    I have an UIImage which is shown in an UIImageView I also have another image in an UIImageView which lays above the firs
  • 如何检查 BOOL 是否为空?

    有没有办法在将值分配给 BOOL 之前检查该值是否为 NULL Nil 例如 我在 NSDictionary 中有一个值可以是 TRUE FALSE NULL mySTUser current user following results
  • 在不同的捆绑包上测试 iPhone 应用内购买?

    我们有一组 iPhone 应用程序的 Beta 测试人员 最近 我们在应用程序中添加了应用内购买功能 在此之前 我们会使用单独的捆绑 ID 和名称向 Beta 测试人员发送临时版本 以便他们可以在手机上拥有商店版本和临时版本 然而 似乎我们
  • 是什么导致了这个 iPhone 崩溃日志?

    我有点卡住了 需要解决这个问题 因为我的一个应用程序出现了随机崩溃 而这些崩溃并不总是能够重现 这是崩溃日志之一 Incident Identifier 59865612 9F00 44EA 9474 2BF607AD662E CrashR
  • 用 UIView 像翻书一样翻页?

    我正在尝试在之间切换UIViews让它看起来就像你正在翻书的一页 The UIViewAnimationTransitionCurlUp如果我能让它向左或向右卷曲 那就非常接近了 这可能吗 我尝试过使用CATRansition但没有一种动画
  • PresentModalViewController 不执行任何操作

    我有一个 UIViewController parent 调用presentModalViewController与另一个 UIViewController child on viewDidLoad If parent没有 UINaviga
  • 应用程序未通过协同设计验证?

    我在提交 iPhone 申请时遇到问题 我看到了一些类似的问题 但没有找到答案 当我存档项目并单击 验证 时 收到错误消息 应用程序未通过协同设计验证 签名无效 或者未使用 Apple 提交证书进行签名 我假设我在协同设计部分做错了什么 我

随机推荐

  • 如何在 Angular 中注册触摸移动事件?

    总结一下问题 堆栈闪电战 https stackblitz com edit angular touch playground https stackblitz com edit angular touch playground 我正在尝试
  • SQL Server NText 字段限制为 43,679 个字符?

    我使用 SQL Server 数据库来存储很长的 Unicode 字符串 该字段来自 ntext 类型 理论上应限制为 2 30 个 Unicode 字符 From MSDN 文档 https msdn microsoft com en u
  • nginx:将所有请求发送到单个html页面

    使用 nginx 我想保留 url 但无论如何实际上都会加载相同的页面 我将使用该网址History getState 在我的 javascript 应用程序中路由请求 看起来这应该是一件很简单的事情吧 location rewrite b
  • 重定向弹出窗口并发布消息

    我陷入了一个问题 我必须从弹出窗口重定向到不同的域并向其发布消息 这是场景 用户打开一个新的弹出窗口 该窗口位于同一域中 例如 http doamin one com http doamin one com 用户在弹出窗口中填写表格并单击提
  • 当程序有命令行参数时,如何使用 GDB 分析程序的核心转储文件?

    我的程序是这样运行的 exe p param1 i param2 o param3 它崩溃并生成一个核心转储文件 core pid 我想通过以下方式分析核心转储文件 gdb exe p param1 i param2 o param3 co
  • 如何将 i18n 用于一种语言 cakephp

    我如何设置 i18n 才能翻译成西班牙语 我不希望用户更改应用程序上的语言 所以我只需要用户以西班牙语查看该应用程序 我认为不需要任何路由 我是对的吗 如果您的网站只有一种语言 只需将西班牙语文本直接写入需要的视图文件中即可 无需加倍工作
  • 在 Dockerfile 中如何从网络驱动器复制文件

    我在以下位置托管了一个文件 无法更改 somenetwork somefiles myfile In my Dockerfile我想 COPY somenetwork somefiles myfile opt files file 有没有办
  • 如何以编程方式(在运行时)滑动 RecyclerView 的一行?

    我有一个 RecyclerView 里面有这样的项目 I use ItemTouchHelper SimpleCallback监听 swipe 和 onChildDraw 以在项目被滑动时绘制画布 再多滑动一下 我的问题 我想仅在项目列表中
  • gtk_box_pack_start 和 gtk_container_add 有什么区别?

    在我看来 这两个函数都可以用来向容器添加一些小部件 有什么不同 gtk pack start让您可以更好地控制子窗口小部件如何分配空间 您可以控制子窗口小部件是否 扩展 分配任何额外空间 填充 使用所有分配的空间或仅使用它们请求的最小空间
  • JavaScript - 将带有方法的对象保存为字符串

    我一直在寻找一种方法来做到这一点 但似乎找不到任何东西 我有不同的配置对象 我需要将它们保存为变量中的文本以便稍后进行处理 这里是一个示例 object args config config next null final delimite
  • 阅读此 XML 的好方法是什么?

    阅读此 XML 的好方法是什么 或者也许我可以以不同的方式构建 XML 我想要的是流程成为主要内容 然后您可以遵循任意数量的相关流程
  • 如何阻止 favicon.ico 请求?

    我没有 favicon ico 但我的浏览器总是发出请求 是否可以阻止浏览器从我的网站发出对网站图标的请求 也许 HTML 标头中有一些元标记 我首先要说的是 在网页中拥有网站图标是一件好事 通常 然而 这并不总是理想的 有时开发人员需要一
  • 错误:(gcloud.services.enable)用户无权访问项目(或者可能不存在):调用者没有权限

    我希望编写一个可以从 Cloud Shell 运行的脚本 以便在所有项目中启用 API 它正在成功地完成每个项目 但我收到每个项目都被拒绝的消息 我是所有者 所以不应该有任何许可问题 作为权限测试 如果我仅运行 gcloud service
  • C++三元运算符执行条件

    我不确定 C C 三元运算符的执行保证 例如 如果给我一个地址和一个布尔值来判断该地址是否适合读取 我可以使用 if else 轻松避免读取错误 int foo const bool addressGood const int ptr if
  • 为 jQuery 延迟对象提供默认的“失败”方法

    我正在使用 jQuery 编写一个 Javascript API 客户端 我的顶级请求方法如下所示 function request method uri params proxies var deferred Deferred ajax
  • Fabric.js 直线并单击选择

    我为这段代码创建了 3 种模式 选择行 画线和 删除行 看起来它正在工作 但我想改变两件事 例如 每次我选择一行时 我只需要单击它 你能告诉我如何改进我的代码吗 谢谢您的回答 这是我的代码
  • 在 SecurityContext 中找不到 Authentication 对象 - Spring 3.2.2

    我正在尝试从实现了的类中调用受保护的方法ApplicationListener
  • Firebase 云函数打字稿错误“并非所有代码路径都返回值”

    我正在使用 firebase 云功能和 firestore 交易来减少基于购买的产品的可用数量 部署时 它返回错误 错误 TS7030 并非所有代码路径都返回值 这是代码 import as functions from firebase
  • 在本地模拟/模拟 SQL Azure?

    与常规 MS 开发内容相比略有 OT 我想使用 MSSQL 2008 作为数据库来编写我的下一个 NET 4 0 应用程序 但以 Azure 就绪 的方式配置存储和访问方法 因此当新的财政年度在夏季开始时 我们可以想象做一些影响较小的事情
  • iPhone:Bonjour NSNetService IP 地址和端口

    请原谅我的 iPhone Objective C 新手身份 我已经使用 NSNetServiceBrowser 找到了我的 HTTP 服务器 但现在我只想找到该服务的 IP 地址和端口 我的委托方法中有类似以下内容的内容 NSNetServ