我仍在努力从我的程序正在与之通信的硬件中读取传入的响应消息。
我正在使用 GSocketClient,并且能够使用 g_output_stream_write() 连接并成功发送消息。然后我想读取从设备发回的响应,但我无法知道回复将有多少字节才能使用 g_input_stream_read()。我也尝试过使用 g_input_stream_read_all(),但这似乎会阻止应用程序并且永远不会返回。我不知道 g_input_stream_read_all() 如何确定它已到达流的末尾,但我认为问题出在某个地方?
我知道有传入数据,因为我可以使用 g_input_stream_read() 和 5 这样的虚构字节大小,然后我会看到前 5 个传入字节,但响应大小总是不同的。
所以我的问题是,有没有办法确定有多少数据正在等待读取,以便我可以将其插入 g_input_stream_read() 作为要读取的大小的变量?如果不是,那么 g_input_stream_read_all() 的正确用法是什么让它不会像我看到的那样阻塞?