我仍然在努力能够从我的程序正在与之通信的硬件中读取传入的响应消息。
我正在使用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()的正确用法是什么才能使它不像我看到的那样阻塞呢?
答案 0 :(得分:0)
是否有以下工作?
#define BUF_SIZE 1024
guint8 buffer[BUF_SIZE];
GByteArray *array = g_byte_array_new();
gsize bytes_read;
GError *error = NULL;
while (g_input_stream_read_all(istream, buffer, BUF_SIZE, &bytes_read, NULL, &error))
{
g_byte_array_append(array, buffer, bytes_read);
if (bytes_read < BUF_SIZE)
/* We've reached the end of the stream */
break;
}
if (error)
// error handling code