C 通过GIO网络传输丢失的数据

C 通过GIO网络传输丢失的数据,c,gtk,gio,C,Gtk,Gio,我和GIO有问题。我正在通过网络传输数据,它在接收到的字节百分比(通过STRINGSIZE更改)中运行良好,但在这之后,它不会复制任何内容。例如,如果STRINGSIZE为350,则仅复制超过50个字节的数据。有什么想法吗 gboolean recieve_complete(GSocketService *socket, GSocketConnection *connection, GObject *source_object, gpointer user_data){

我和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);
     }
gboolean接收完成(GSocketService*套接字、GSocketConnection*连接、GObject*源对象、gpointer用户数据){
GInputStream*输入;
int i;
int*接收的_数据=malloc(sizeof(int)*(STRINGSIZE+50));
对于(i=0;i<(STRINGSIZE+50);i++)
接收的_数据[i]=0;//将寄存器设置为空。
输入=g_io_流_获取_输入_流(g_io_流(连接));
g_输入_流_读取(输入,接收_数据,(STRINGSIZE+50),NULL,NULL);
过程数据(接收到的数据);
免费(接收到的_数据);
}

您没有计算实际读取的字节数
g\u input\u stream\u read
返回值-这可能与请求的字节数不同


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

drahnr是正确的。如果您希望一次获取所有数据,请改用。

可能您的输入流的长度不超过STRINGSIZE+50。因此,它仅复制到其长度?输入流也是STRINGSIZE+50。双方均确认发送和接收完整的STRINGSIZE+50。然而,在接收端,它的大部分是空的