请写一个g_socket_client_connect_async 的使用示例
时间: 2023-08-04 21:09:35 浏览: 230
好的,以下是一个简单的使用示例:
```c
#include <gio/gio.h>
void connect_callback(GObject *source_object, GAsyncResult *res, gpointer user_data)
{
GSocketConnection *connection = g_socket_client_connect_finish(G_SOCKET_CLIENT(source_object), res, NULL);
if (connection == NULL) {
g_print("Failed to connect to server!\n");
return;
}
// 连接成功,进行后续操作
g_print("Connected to server!\n");
// ...
}
int main(int argc, char *argv[])
{
GMainLoop *loop;
GSocketClient *client;
GSocketAddress *addr;
GError *error = NULL;
loop = g_main_loop_new(NULL, FALSE);
client = g_socket_client_new();
addr = g_network_address_new("127.0.0.1", 1234);
g_socket_client_connect_async(client, addr, NULL, connect_callback, NULL);
g_main_loop_run(loop);
g_object_unref(client);
g_object_unref(addr);
g_main_loop_unref(loop);
return 0;
}
```
在这个例子中,我们首先创建了一个 `GSocketClient` 对象,然后使用 `g_network_address_new` 函数创建了一个网络地址对象。接着,调用 `g_socket_client_connect_async` 函数来异步连接这个网络地址,连接完成后会回调 `connect_callback` 函数。在这个回调函数中,我们可以通过 `g_socket_client_connect_finish` 函数获取到连接成功后的 `GSocketConnection` 对象,然后进行后续操作。最后,使用 `g_main_loop_run` 函数来运行 GLib 的主循环,保证程序不会提前退出。需要注意的是,在程序结束时需要释放创建的对象。
阅读全文