【问题标题】:Lost Data over GIO Network Transmission通过 GIO 网络传输丢失数据
【发布时间】:2013-06-11 12:50:54
【问题描述】:

我对 GIO 有疑问。我正在通过网络传输数据,它对于接收到的一定百分比的字节(通过 STRINGSIZE 更改)非常有效,但之后它什么也不复制。例如,如果 STRINGSIZE 为 350,它只复制超过 50 个字节。有任何想法吗?

    gboolean recieve_complete(GSocketService *socket, GSocketConnection *connection,      GObject *source_object, gpointer user_data){
          GInputStream * input;
          int i;
          int *recieved_data = malloc(sizeof(int) * (STRINGSIZE + 50));
          for(i = 0; i < (STRINGSIZE + 50); i++)
              recieved_data[i] = 0;  //Sets register to empty.

          input = g_io_stream_get_input_stream(G_IO_STREAM(connection));
          g_input_stream_read (input, recieved_data, (STRINGSIZE + 50), NULL, NULL);
          proccess_data(recieved_data);
          free(recieved_data);
     }

【问题讨论】:

  • 可能您的输入流的长度不超过 STRINGSIZE+50。所以它只会被复制到它的长度?
  • 输入流也是 STRINGSIZE+50。两者都确认发送和接收完整的 STRINGSIZE+50。然而在接收端,大部分都是空的

标签: c gtk gio


【解决方案1】:

您没有评估实际读取的字节数 g_input_stream_read 返回 - 这可能与请求的字节数不同。

https://developer.gnome.org/gio/2.32/GInputStream.html#g-input-stream-read

更多输出和使用随机字符串的示例传输会很好。

【讨论】:

    【解决方案2】:

    drahnr 是对的。如果您想一次获取所有数据,请改用g_input_stream_read_all

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多