2013-05-27 53 views
0

我一直在为TCP和UDP网络编程库,并想过使用数据包。目前我已经实现了一个可以像C++标准库的流类一样使用的数据包类(它有< <和>>用于输入和读取数据)。我打算发送这样的数据包:在网络库中使用数据包是一个好主意吗?

bytes 1-8  - uint64_t as the size of the packet. 
bytes 8-size  - contents of the packet. 

但有一个问题。如果一个恶意客户端发送一个以兆兆字节为单位的大小和随机乱码作为填充符,会怎么样?服务器的内存充满了随机的乱码,它会冻结/崩溃。

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

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

(PS:我不是以英语为母语,所以原谅我的语言可能是可怕的用法。)

+0

您可以将数据包始终限制为32位甚至16位。您何时真的需要64位数据包大小? – EJP

+0

@EJP我选择了uint64_t,因为我可能想发送大于4 GB的文件。虽然可能会使uint32和16可用。 – Hassedev

回答

1

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

+0

感谢您的回答,我会尽我所能接受。如果服务器尝试发送太大的数据包时服务器会自动断开客户端连接,会不会过度反应? – Hassedev

相关问题