gpt4 book ai didi

arrays - 如何在D中使用动态数组进行UDP接收?

转载 作者:行者123 更新时间:2023-12-03 12:04:35 25 4
gpt4 key购买 nike

我想创建一个简单的UDP服务器,可以接收不同长度的消息。但是,似乎D的Socket.receiveFrom()期望使用静态长度缓冲区数组。当以下代码运行时:

void main() {
UdpSocket server_s;
Address client_addr;
ubyte[] in_buf;
ptrdiff_t bytesin;

server_s = new UdpSocket();
server_s.bind(new InternetAddress(InternetAddress.ADDR_ANY, PORT_NUM));

bytesin = server_s.receiveFrom(in_buf, client_addr);
if (bytesin == 0 || bytesin == Socket.ERROR) {
writeln("Error receiving, bytesin: ", bytesin);
return;
}

// Do stuff
}
receiveFrom()立即通过 bytesin == 0掉线。为什么是这样?我什至可以使用动态数组通过UDP接收数据吗?

最佳答案

receivereceiveFrom自己不进行分配。您可以传递一个固定大小的数组,该数组的大小足以容纳您期望的任何数据包,然后根据收到的字节数对其进行切片。

如果您预分配了64 KB,则应该可以满足您想像得到的所有内容。我倾向于只使用4 KB缓冲区。

ubyte[4096] in_buf;
bytesin = server_s.receiveFrom(in_buf, client_addr);
// check for error first then
auto message_received = in_buf[0 .. bytesin];
// process it
// keep looping, reusing the buffer, to get more stuff

关于arrays - 如何在D中使用动态数组进行UDP接收?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33977546/

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