cocoa - 一次从一个 TCP 套接字向另一个 TCP 套接字发送超过 32768 字节

标签 cocoa nsdata tcpsocket nsfilehandle nssocketport

嘿伙计们,我不知道是否有人问过这个问题,但想象一下以下情况:

我有两个 TCP 套接字(用 NSSocketPort 打开并用两个 NSFileHandle 监听),现在我想在它们之间发送一些 NSData .

@try {
    [fileHandle writeData:data];
}
@catch (NSException * e) {
    // Do some alert
}

一切正常,直到我想发送长度超过 32768 字节的 NSData 实例。超过此字节数将不会被传输。所以这是我的问题:

1) 为什么 Cocoa 不能一次发送超过 32768 字节?
2)我必须想办法吗?
3)如果是的话,我会拆分数据,但是你会怎么做呢?另一个套接字如何知道所有数据何时发送?

顺便说一下,发送这个单个 NSData 实例后,两个套接字都应该再次关闭。

最佳答案

一次发送的数据量取决于底层框架和库使用的缓冲区的大小。虽然它可能是可配置的,但它基本上是无关紧要的。 TCP 的优点是它要么保证传送数据(在一个或多个数据包中),要么优雅地失败。

  1. 发送前您无需拆分数据。底层系统会为你做这件事。
  2. 在接收端,您可以读取可用数据,然后等待更多字节到达,处理它们,依此类推,直到没有更多数据可用。当发送方完成数据发送后,它将关闭套接字,并且接收方将收到通知。

关于cocoa - 一次从一个 TCP 套接字向另一个 TCP 套接字发送超过 32768 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2224550/

相关文章:

objective-c - 将核心数据存储从 iCloud 迁移到本地

ios - 如何将 MKOverlay 对象存储到文件以便稍后检索

c# - 验证套接字是否打开的可靠方法是什么?

javascript - 单个应用程序中的 Dotcloud www 和 TCP -

ruby - 为什么 TCPsocket 在 ruby​​ 1.8.7 中工作

swift - 撤消麻烦 : Initialise `NSPersistentDocument` programmatically without "edited" flag in title bar

iphone - 用于简单 iPhone 游戏的核心动画或 OpenGL

macos - 我的 MacOS 应用程序的数据库位于哪里?

ios - 在 iOS 中删除内存映射文件——幕后发生了什么?

swift - 处理 NSData (Data) 范围异常