Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ios同步套接字选项_Ios_Sockets_Tcp - Fatal编程技术网

ios同步套接字选项

ios同步套接字选项,ios,sockets,tcp,Ios,Sockets,Tcp,我正在开发一个ios应用程序,使用TCP连接到服务器,并将接收到的字节显示在屏幕上。 我使用NSStream(异步)在互联网上使用了许多示例,我确实连接并获得了一些字节。 问题是异步套接字可能会将多个TCP数据包合并到一个事件触发器中(标准行为)。服务器的应答字节长度是多种多样的,异步套接字似乎无法帮助正确地切分数据包 我想知道sync socket是否能解决这个问题,问题如下: 同步套接字是否会如上所述合并数据包 除了POSIX(许多文章告诉我不要使用POSIX),IOS上的同步套接字还有什么

我正在开发一个ios应用程序,使用TCP连接到服务器,并将接收到的字节显示在屏幕上。 我使用NSStream(异步)在互联网上使用了许多示例,我确实连接并获得了一些字节。 问题是异步套接字可能会将多个TCP数据包合并到一个事件触发器中(标准行为)。服务器的应答字节长度是多种多样的,异步套接字似乎无法帮助正确地切分数据包

我想知道sync socket是否能解决这个问题,问题如下:

  • 同步套接字是否会如上所述合并数据包
  • 除了POSIX(许多文章告诉我不要使用POSIX),IOS上的同步套接字还有什么其他选项
  • 有我可以遵循的示例代码吗

  • 使用同步调用并不能真正解决您的问题。本质上,TCP会话只是一个字节流。底层网络堆栈和设备不需要维护传输分组。即使您使用同步/阻塞调用,您可能仍然会从读取请求返回到代码的多个“传输”


    您需要编写代码,以便它能够检测流中包含的离散消息。这通常是通过包含消息长度的头或在简单情况下包含终止字符(如回车)来完成的。

    最后,我使用C中的POSIX套接字解决了这个问题。谢谢。

    我是objectC(ios)的新手,但在java/C中从未遇到过这个问题。因为服务器站点上的内容已经修复(没有头/终止字符,因为它是字节数据)并且我不是唯一使用服务器的客户端。您有什么建议吗?谢谢。听起来您的协议“坏了”。依赖TCP传输作为分隔符是有缺陷的。您可以使用UDP来做这件事,因为如果服务器的回复频率较低,则每个数据包都是不连续的。(每包5秒).现在的问题是hasBytesAvailable没有触发,10秒后我一次读取两个数据包。完全正确。协议依赖于TCP流未定义的行为。它在TCP/IP堆栈的特定实现上崩溃只是时间问题,现在它已经崩溃了。即使我们正在讨论,我也不应该依赖TCP packet作为分隔符。这在性能方面非常差。我是否可以控制Hasbytes如何触发?否则将同步套接字帮助?