我的名字叫Michel,正在尝试用我可爱的dotnet编写Postgres连接驱动程序。
Postgres消息协议很简单-[int8操作码] [int32长度] [有效载荷]。
我正在尝试从流中读取前五个字节,以检测消息类型和有效载荷长度。然后,我尝试读取有效载荷,在上一步中必须读取该长度,并且...连接被Postgres关闭。 例如,我们有一个AuthMessage [uint8操作码] [int32长度(总是8)] [int32 auth_type]
/// open a TCP connection, getting the stream, sending hello message
stream.Read(buffer, 0, 5);
/// parsing a buffer, creating a new one
stream.Read(buffer, 0, messageLenght - 4) // connection getting lost at this
第一个数据包的长度始终相同,因此我们可以尝试一步读取所有9个字节
/// open a TCP connection, getting the stream, sending hello message
stream.Read(buffer, 0, 9); // this works! no connection drop
如何通过一次操作读取标头数据包字节,解析它们并读取所有有效载荷数据?