我对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);
     }

最佳答案

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

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

一些更多的输出和带有随机字符串的示例传输会很好。

关于c - 通过JIO网络传输丢失数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17044570/

10-11 22:06