1
我想創建一個簡單的UDP服務器,可以接收不同長度的消息。但是,D的Socket.receiveFrom()
看起來好像是一個靜態長度的緩衝區數組。當下面的代碼運行:如何在D中爲UDP接收使用動態數組?
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接收?
謝謝,就是這樣。應該知道這正是字節數。這應該在std.socket文檔中有更好的記錄行爲。哎呀,也許他們應該創建一個動態分配的版本。 – Nerve
底層的OS功能需要一個緩衝區,但它們的工作方式與這些功能完全相同。不同的做法可能是可能的,但棘手的,無論如何沒有多大的好處...我希望文檔通過更多的例子更好地說出來。 –
基本上任何語言都要求您在接收之前分配緩衝區。你也可以創建自己的功能。我沒有看到它成爲std庫的一部分的原因。 – Bauss