连续多次读取套接字数据会导致连接断开

时间:2019-06-05 11:40:26

标签: .net postgresql

我的名字叫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

如何通过一次操作读取标头数据包字节,解析它们并读取所有有效载荷数据?

0 个答案:

没有答案