Networking 在网络库中使用数据包是一个好主意吗?

Networking 在网络库中使用数据包是一个好主意吗?,networking,stream,packets,Networking,Stream,Packets,我一直在为TCP和UDP网络编写一个库,并考虑使用数据包。目前我已经实现了一个包类,它可以像C++标准库的流类一样使用(它有用于输入和读取数据)。我计划这样发送数据包: bytes 1-8 - uint64_t as the size of the packet. bytes 8-size - contents of the packet. 但是有个问题。如果一个恶意客户端发送一个以TB为单位的大小和随机乱码作为填充,该怎么办?服务器的内存中充满了随机乱码,它将冻结/崩溃

我一直在为TCP和UDP网络编写一个库,并考虑使用数据包。目前我已经实现了一个包类,它可以像C++标准库的流类一样使用(它有用于输入和读取数据)。我计划这样发送数据包:

bytes 1-8        - uint64_t as the size of the packet.
bytes 8-size     - contents of the packet.
但是有个问题。如果一个恶意客户端发送一个以TB为单位的大小和随机乱码作为填充,该怎么办?服务器的内存中充满了随机乱码,它将冻结/崩溃

让服务器决定接收数据包的最大允许大小是一个好主意吗

或者我应该丢弃数据包并实现数据流传输(读/写完全由库的用户决定)


(注:我不是以英语为母语的人,所以请原谅我可能使用这种语言的可怕用法。)

是的,在服务器端设置允许的最大大小。将其设置为服务器不会冻结/崩溃,但不会更小。可预测的行为应该是最高的目标。

谢谢你的回答,我会在可能的时候接受它。如果服务器试图发送太大的数据包时自动断开客户端的连接,这会不会反应过度?您可以始终将数据包限制为32位,甚至16位。您什么时候真的需要64位数据包大小?@EJP我选择了uint64\u t,因为我可能想发送大于4 GB的文件。但可能会提供uint32和16。