jjzjj

iPhone Native系统例程(datagram-socket-type)

coder 2024-01-22 原文

Sockets are full-duplex communication channels between processes either local to the same host machine or where one process is on a remote host. Unlike pipes, in which data goes in one direction only, sockets allow processes both to send and receive data. NSFileHandle facilitates communication over stream-type sockets by providing mechanisms run in background threads that accept socket connections and read from sockets.

NSFileHandle currently handles only communication through stream-type sockets. If you want to use datagrams or other types of sockets, you must create and manage the connection using native system routines.

The process on one end of the communication channel (the server) starts by creating and preparing a socket using system routines. These routines vary slightly between BSD and non-BSD systems, but consist of the same sequence of steps:

  1. 创建一个流式套接字 某些协议(protocol)。

  2. 将名称绑定(bind)到套接字。

  3. 将自己添加为观察者 NSFileHandleConnectionAcceptedNotification。

  4. 发送 acceptConnectionInBackgroundAndNotify 到这个文件句柄对象。

    这个方法接受连接 背景,创建一个新的 NSFileHandle 来自新套接字描述符的对象, 并发布 NSFileHandleConnectionAcceptedNotification。

现在我看到迈克尔回答了。 About the differences between “stream-type” socket and a “datagram” socket type

你们有原生系统例程(datagram-socket-type)的 iPhone 实现示例吗?

最佳答案

好的,首先我找到了我需要的东西,CFSocket API 允许我实现 UDP 同步。

CFSocket API

套接字是最基本的网络通信级别。 socket 的作用类似于电话插孔。它允许您连接到另一个套接字(本地或通过网络)并将数据发送到该套接字。

最常见的套接字抽象是 BSD 套接字。 CFSocket 是 BSD 套接字的抽象。 CFSocket 以极少的开销提供了 BSD 套接字的几乎所有功能,并将套接字集成到运行循环中。 CFSocket 不限于基于流的套接字(例如 TCP),它可以处理任何类型的套接字。

您可以使用 CFSocketCreate 函数从头开始创建一个 CFSocket 对象,或者使用 CFSocketCreateWithNative 函数从 BSD 套接字创建一个 CFSocket 对象。然后,您可以使用函数 CFSocketCreateRunLoopSource 创建一个运行循环源,并使用函数 CFRunLoopAddSource 将其添加到运行循环中。这将允许您的 CFSocket 回调函数在 CFSocket 对象收到消息时运行。

尽管我找到了 AsyncSocket API。

CocoaAsyncSocket 支持 TCP 和 UDP。 AsyncSocket 类用于 TCP,AsyncUdpSocket 类用于 UDP。每个类如下所述。

AsyncSocket 是一个包装了 CFSocket 和 CFStream 的 TCP/IP 套接字网络库。它提供异步操作和一个完整的委托(delegate)支持的本地 cocoa 类。以下是主要功能:

排队的非阻塞读取和写入,带有可选的超时。你告诉它读什么或写什么,它会在完成后给你打电话。 自动套接字接受。如果你告诉它接受连接,它会为每个连接调用你自己的新实例。当然,您可以立即断开它们。 代表支持。错误、连接、接受、读取完成、写入完成、进度和断开连接都会导致调用您的委托(delegate)方法。 基于运行循环,而不是基于线程。虽然您可以在主线程或工作线程上使用它,但您不必这样做。它使用 NSRunLoop 异步调用委托(delegate)方法。委托(delegate)方法包括一个套接字参数,允许您区分许多实例。 独立于一个类。您不需要处理流或套接字。该类处理所有这些。 支持 IPv4 和 IPv6 上的 TCP 流。 该库是公共(public)领域,最初由 Dustin Voss 编写。现在可在公共(public)场合使用,以允许并鼓励其继续支持。

AsyncUdpSocket 是一个包装了 CFSocket 的 UDP/IP 套接字网络库。它的工作方式几乎与 TCP 版本完全相同,但专为 UDP 设计。这包括排队的非阻塞发送/接收操作、完全委托(delegate)支持、基于运行循环的自包含类以及对 IPv4 和 IPv6 的支持。

CocoaAsyncSocket

这是 CFSocket 引用

CFSocket Reference

关于iPhone Native系统例程(datagram-socket-type),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6173721/

有关iPhone Native系统例程(datagram-socket-type)的更多相关文章

  1. ruby-openid:执行发现时未设置@socket - 2

    我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass

  2. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  3. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

  4. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  5. ruby-on-rails - Rails 单表继承 : How to override the value written to the type field - 2

    在我的系统中,我已经定义了STI。Dog继承自Animal,在animals表中有一个type列,其值为"Dog"。现在我想让SpecialDog继承自dog,只是为了在某些特殊情况下稍微修改一下行为。数据还是一样。我需要通过SpecialDog运行的所有查询,以返回数据库中类型为Dog的值。我的问题是因为我有一个type列,rails将WHERE"animals"."type"IN('SpecialDog')附加到我的查询中,所以我不能获取原始的Dog条目。所以我想要的是以某种方式覆盖rails在通过SpecialDog访问数据库时使用的值,使其表现得像Dog。有没有办法覆盖用于类型

  6. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  7. ruby - 在没有基准或时间的情况下用 Ruby 测量用户时间或系统时间 - 2

    因为我现在正在做一些时间测量,我想知道是否可以在不使用Benchmark类或命令行实用程序time的情况下测量用户时间或系统时间。使用Time类只显示挂钟时间,而不显示系统和用户时间,但是我正在寻找具有相同灵active的解决方案,例如time=TimeUtility.now#somecodeuser,system,real=TimeUtility.now-time原因是我有点不喜欢Benchmark,因为它不能只返回数字(编辑:我错了-它可以。请参阅下面的答案。)。当然,我可以解析输出,但感觉不对。*NIX系统的time实用程序也应该可以解决我的问题,但我想知道是否已经在Ruby中实

  8. ruby-on-rails - 为什么方法 column_types 在 Rails 5.0 中未定义? - 2

    我正在为一个类赋值,它在rspec测试中使用了column_types方法。it"Userdatabasestructureinplace"doexpect(User.column_names).toinclude"password_digest","username"expect(User.column_types["username"].type).toeq:stringexpect(User.column_types["password_digest"].type).toeq:stringexpect(User.column_types["created_at"].type).t

  9. ruby - 以毫秒为单位获取当前系统时间 - 2

    在Ruby中,以毫秒为单位获取自纪元(1970)以来的当前系统时间的正确方法是什么?我试过了Time.now.to_i,好像不是我想要的结果。我需要结果显示毫秒并且使用long类型,而不是float或double。 最佳答案 (Time.now.to_f*1000).to_iTime.now.to_f显示包含十进制数字的时间。要获得毫秒数,只需将时间乘以1000。 关于ruby-以毫秒为单位获取当前系统时间,我们在StackOverflow上找到一个类似的问题:

  10. ruby-on-rails - 如何构建复杂的 Rails 系统 - 2

    关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭8年前。Improvethisquestion我们有以下(以及更多)系统,我们将数据从一个应用推送/拉取到另一个:托管CRM(InsideSales.com)Asterisk电话系统(内部)横幅广告系统(openx,我们托管)潜在客户生成系统(自行开发)电子商务商店(spree,我们托管)工作板(本土)一些工作网站抓取+入站工作提要电子邮件传送系统(如Mailchimp,自主开发)事件管理系统(如eventbrite,自主开发)仪表板系统(大量图表和

随机推荐