私は、受信した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);
}
}
[OK]を、私はそれを変えたの周りに "gchar *バッファ= g_malloc(サイズ);"セグメンテーション違反の世話をした。しかし、今は完全にクラッシュするのではなく、get_incoming_messageの呼び出しでフリーズするようです。 – DrRocket
最初の思考(再びドキュメントを見ずに)はブロックされ、完全な100文字が入るのを待っています。 – John3136
私はそれをしたと思います。再度、感謝します! – DrRocket