gpt4 book ai didi

swift - ChannelInboundHandler (Swift-NIO) 中的 writeDataUnsupported

转载 作者:搜寻专家 更新时间:2023-10-31 08:28:55 24 4
gpt4 key购买 nike

我正在尝试制作一个简单的 echo UDP 服务器,它发回所有以 UTF8 字符串为前缀的传入数据报。

在我试图达到这个目标的过程中,我成功地发回了传入的数据,但是当我尝试用字符串作为前缀时:“You sent:”,我得到一个错误writeDataUnsupported

这是我的代码:

我制作了一个名为 EchoChannelInboundHandler 它所做的只是:对于每个传入的数据报,它发送字符串 "You sent: " 和然后是传入数据报的数据。

final class Echo: ChannelInboundHandler {
typealias InboundIn = ByteBuffer
typealias OutboundOut = ByteBuffer

var wroteResponse = false
static let response = "You sent: ".data(using: .utf8)!

func channelRead(ctx: ChannelHandlerContext, data: NIOAny) {
if !wroteResponse {
var buffer = ctx.channel.allocator.buffer(capacity: Echo.response.count)
buffer.write(bytes: Echo.response)
ctx.write(self.wrapOutboundOut(buffer), promise: nil)
wroteResponse = true
}
ctx.write(data, promise: nil)
}

func channelReadComplete(ctx: ChannelHandlerContext) {
ctx.flush()
wroteResponse = false
}
}

然后我制作了一个单线程事件循环组并为其分配了一个数据报 Bootstrap 。然后我将 Bootstrap 绑定(bind)到端口 4065。

let 🔂 = MultiThreadedEventLoopGroup(numThreads: 1)
let bootstrap = DatagramBootstrap(group: 🔂)
.channelOption(ChannelOptions.socket(SocketOptionLevel(SOL_SOCKET), SO_REUSEADDR), value: 1)
.channelInitializer { $0.pipeline.add(handler: Echo()) }
defer {
try! 🔂.syncShutdownGracefully()
}


try bootstrap
.bind(host: "127.0.0.1", port: 4065)
.wait()
.closeFuture
.wait()

为什么我在尝试发送字符串时总是得到此 writeDataUnsupported:"You sent: "

最佳答案

对于 DatagramChannel你需要包装你的 ByteBuffer进入 AddressEnvelope .这也意味着您的 ChannelInboundHandler 应该在 AddressedEnvelope<ByteBuffer> 上运行.

关于swift - ChannelInboundHandler (Swift-NIO) 中的 writeDataUnsupported,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49265262/

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