使用GSocket接收简单的UDP消息

时间:2012-02-15 02:28:50

标签: c glib

我正在开发一个非常简单的应用程序,它需要在指定的端口上侦听传入的UDP消息,然后在GTK Entry字段中显示它们。我试图从GSocket文档开始工作,但没有太多运气。

以下是我的相关功能(错误检查遗漏)。我从main调用open_listen_socket,然后启动一个每秒调用get_incoming_messages的超时。第一次调用get_incoming_messages时,应用程序崩溃并出现Segmentation故障。

我不知道我是否只是遗漏了一些愚蠢的东西,或者如果我使用GSocket进行聆听,我完全走错了路,但任何指导都会非常感激。我一直在一个短暂的截止日期,过去几天你们一直在拯救我的屁股!

static void open_listen_socket()
{

GInetAddress *localAddress;
GSocketAddress *localSocketAddress;


localAddress = g_inet_address_new_from_string("127.0.0.1");
guint16 listenPort = atoi(gtk_entry_get_text (GTK_ENTRY (listenPortField)));

localSocketAddress = g_inet_socket_address_new(localAddress, listenPort);

listenSocket = g_socket_new(G_SOCKET_FAMILY_IPV4, G_SOCKET_TYPE_DATAGRAM, 17, NULL);

g_socket_bind (listenSocket, localSocketAddress, FALSE, NULL);



}

static void get_incoming_message()
{

gchar *buffer=NULL;
gsize size=100;

g_socket_receive(listenSocket, buffer, size, NULL, NULL);

if (strlen(buffer) > 0)
{
    gtk_entry_set_text (GTK_ENTRY (current_status_message_box), buffer);
}


}

1 个答案:

答案 0 :(得分:1)

不看文档,对g_socket_receive的调用看起来很虚伪。缓冲区arg为null - 与此有关的函数是什么(它可能意味着它将分配自己的缓冲区)。你确定它不是& buffer的意思吗?

<编辑>

不,它是一个char *,应该至少分配大小字节。你的是空的。这样做。

< / edit>