使用GSocket写一个TCP连接的可靠例子
时间: 2024-03-09 13:50:43 浏览: 120
Socket编写的TCP通信实例
好的,以下是一个使用GSocket库实现TCP连接的可靠例子:
```c
#include <gio/gio.h>
int main(int argc, char *argv[]) {
GSocketClient *client;
GSocketConnection *connection;
GOutputStream *output;
GInputStream *input;
GError *error = NULL;
gchar *host = "example.com";
guint16 port = 80;
gchar *request = "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n";
gssize request_len = strlen(request);
/* 初始化GSocket库 */
g_socket_init();
/* 创建一个GSocketClient实例 */
client = g_socket_client_new();
/* 连接到远程主机 */
connection = g_socket_client_connect_to_host(client, host, port, NULL, &error);
if (error != NULL) {
g_print("Failed to connect to %s:%d: %s\n", host, port, error->message);
g_error_free(error);
return 1;
}
/* 获取输入输出流 */
output = g_io_stream_get_output_stream(G_IO_STREAM(connection));
input = g_io_stream_get_input_stream(G_IO_STREAM(connection));
/* 发送请求 */
g_output_stream_write_all(output, request, request_len, NULL, NULL, &error);
if (error != NULL) {
g_print("Failed to send request: %s\n", error->message);
g_error_free(error);
return 1;
}
/* 接收响应 */
gchar response[1024];
gssize response_len = g_input_stream_read(input, response, sizeof(response), NULL, &error);
if (error != NULL) {
g_print("Failed to receive response: %s\n", error->message);
g_error_free(error);
return 1;
}
/* 打印响应 */
g_print("Response: %.*s\n", (int)response_len, response);
/* 关闭连接 */
g_object_unref(output);
g_object_unref(input);
g_object_unref(connection);
g_object_unref(client);
return 0;
}
```
在上面的例子中,我们使用`GSocketClient`和`GSocketConnection`来创建一个TCP连接,使用`GOutputStream`和`GInputStream`来发送和接收数据。我们首先使用`g_socket_init()`初始化GSocket库,然后创建一个`GSocketClient`实例并连接到远程主机。发送请求和接收响应可以通过`g_output_stream_write_all()`和`g_input_stream_read()`函数来完成。最后,我们释放所有资源并关闭连接。
请注意,上面的例子只是一个简单的示例,它并没有处理TCP连接中的错误和异常情况。在实际应用中,您需要更加谨慎地处理这些情况,以确保TCP连接的可靠性。
阅读全文