2012-02-15 15 views
0

私は、受信したUDPメッセージを指定されたポートでリスンしてGTKエントリフィールドに表示する必要のある非常に簡単なアプリケーションを開発中です。私はGSocketのドキュメントから作業しようとしていますが、多くの運がない。GSocketでシンプルなUDPメッセージを受信

私の関連する機能は以下のとおりです(エラーチェックは省略されています)。私は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

ドキュメントを見ることなく、g_socket_receiveの呼び出しは偽に見えます。バッファargはnullです - それが何を意味するのか(それは独自のバッファを割り当てることを意味する可能性があります)。あなたは&バッファであることを意味するのではないと確信していますか?

<編集>

いや、それは、少なくともsizeバイトを割り当てられることになっているのchar *です。あなたはヌルです。それはそれを行います。

< /編集>

+0

[OK]を、私はそれを変えたの周りに "gchar *バッファ= g_malloc(サイズ);"セグメンテーション違反の世話をした。しかし、今は完全にクラッシュするのではなく、get_incoming_messageの呼び出しでフリーズするようです。 – DrRocket

+0

最初の思考(再びドキュメントを見ずに)はブロックされ、完全な100文字が入るのを待っています。 – John3136

+0

私はそれをしたと思います。再度、感謝します! – DrRocket

関連する問題