0
我在一個非常簡單的應用程序需要偵聽指定端口傳入的UDP消息,然後在GTK輸入欄中顯示他們的工作。我正在嘗試從GSocket文檔開始工作,但沒有多少運氣。接收簡單UDP消息與GSocket
以下是我的相關功能(檢查離開了錯誤)。我叫open_listen_socket從主,然後啓動這就要求get_incoming_messages每一秒鐘左右超時。第一次調用get_incoming_messages時,應用程序崩潰並出現分段錯誤。
我不知道,如果我只是失去了一些東西愚蠢的,或者如果我在完全錯誤的軌道上我對聽力的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);
}
}
好的,我改變了它周圍的 「gchar *緩衝液= g_malloc(大小);」它負責分割故障。但現在看來,在調用get_incoming_message凍結起來,而不是完全崩潰。 – DrRocket 2012-02-15 02:50:42
最初的想法(再次不看文檔)是它阻止,等待其完全100個字符進來。 – John3136 2012-02-15 02:59:03
我認爲做到了。再次感謝! – DrRocket 2012-02-15 03:37:43