gsocket (режим сервера) получает ошибку? - PullRequest
0 голосов
/ 19 февраля 2011

Я снова решил некоторые проблемы ..

скрипт:

#include <stdio.h>
#include <stdlib.h>
#include <gio/gio.h>
#include <netdb.h>
/*
 * 
 */

static GSocket *sock;
    static GError *err = NULL;

void klwar()
{
    g_socket_close(sock,&err);
}

int main(int argc, char** argv) {


    GSocketAddress *gsockaddr;
    struct sockaddr_in sockaddr;
    sockaddr.sin_family = AF_INET;
    sockaddr.sin_port = htons(1221);
    sockaddr.sin_addr.s_addr = INADDR_ANY;

    g_type_init();
    gsockaddr = g_socket_address_new_from_native(&sockaddr,sizeof(sockaddr));

    sock = g_socket_new(G_SOCKET_FAMILY_IPV4,G_SOCKET_TYPE_STREAM,G_SOCKET_PROTOCOL_TCP,&err);

    g_socket_bind(sock,gsockaddr,TRUE,&err);

    g_socket_listen(sock,&err);

    char buff[123];

    atexit(klwar); //avoiding 

    GSocket *ja;


    while(ja = g_socket_accept(sock,NULL,&err))
    {

    gssize a = g_socket_receive(ja,buff,123,NULL,&err);
        printf("data : %s\n",buff);

    }

    return (EXIT_SUCCESS);
}

здесь я намереваюсь установить TCP-соединение и локальную сеть, но опять же, я должен использовать библиотеку gnome, такую ​​как GSOCKET, затем она компилируется, запускается как сервер, но когда я пытаюсь отправить сообщение из 'telnet', происходит сбой как заставить эти вещи работать?

и, в конечном счете, есть ли надлежащая документация для GSocket?

1 Ответ

1 голос
/ 22 марта 2011

Когда вы получаете данные с помощью g_socket_receive () , он помещает данные raw в buf.Теперь printf предназначен для печати строк с нулевым символом в конце ('\ 0');однако ваши данные в buf не заканчиваются нулем и вызывают сбой printf.

См. http://library.gnome.org/devel//gio/stable/GSocket.html для справки по GSocket API.

...