gpt4 book ai didi

sockets - NSStream 在打开期间接收 NSStreamEventEndEncountered

转载 作者:行者123 更新时间:2023-12-02 15:47:46 25 4
gpt4 key购买 nike

我有一个使用 NSStream 进行连接的客户端-服务器应用程序。有时,当尝试打开连接时,连接的一侧在第一次尝试发送消息时会收到 NSStreamEventEndEncountered。

我使用 CFStream 和 NSStream 之间的桥梁。我的服务器创建一个套接字:

_ipv4cfsock = CFSocketCreate(kCFAllocatorDefault,PF_INET, SOCK_STREAM,IPPROTO_TCP, kCFSocketAcceptCallBack, handleConnect, &info);

在handleConnect回调函数中,使用CFStreamCreatePairWithSocket来获取两个CFStream。

我的客户端使用CFStreamCreatePairWithSocketToHost连接到主机。

客户端连接(创建 NSStreams),然后发送 ping。当我的服务器收到连接时,它会打开一个 NSStream,当它收到 ping 时,它会发送一个 pong。

当其中一个连接关闭时,另一个连接应该得到 NSStreanEventEndEncountered,因为我已在流上将 kCFStreamPropertyShouldCloseNativeSocket 设置为 true。

我得到了几个不同的结果:我使用 NSLog 来查看发生了什么。

-大多数时候连接会打开并按预期工作。

Server did recieve new connection
Server recieved ping
Server Sent pong
Client recieved pong

- 尝试发送 pong 时连接关闭(NSStreamEventEndEncountered)。客户端没有收到 pong,但收到 NSStreamEventEndEncountered

Server did recieve new connection
Server recieved ping
Server recieved pong
Server closed
Client closed

-尝试发送 ping 时连接关闭 (NSStreamEventEndEncountered)。服务器未收到 ping 或 NSStreamEventEndEncountered

Server did recieve new connection
Client closed

-尝试发送 ping 时收到错误:

Server did recieve new connection;
Error recieved: The operation couldn’t be completed. Connection reset by peer

客户端和服务器都在我的电脑上。为什么流在尝试写入时会收到 NSStreamEventEndEncountered?

最佳答案

我发现了这个问题,我有一个连接打开后立即发送的缓冲区。如果该缓冲区中没有数据,则发送一个空缓冲区,这是流的结束信号。

来自Apple Doc:

If the other end of the connection closes the connection:

Your connection delegate’s stream:handleEvent: method is called withstreamEvent set to NSStreamEventHasBytesAvailable. When you read fromthat stream, you get a length of zero (0).

Your connection delegate’s stream:handleEvent: method is called with streamEvent set toNSStreamEventEndEncountered.

When either of these two events occurs,the delegate method is responsible for detecting the end-of-filecondition and cleaning up.

关于sockets - NSStream 在打开期间接收 NSStreamEventEndEncountered,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24108006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com