2012-01-20 39 views
3

有沒有人現在我可以找到一些關於gtk/glib網絡的好教程/代碼示例。 我正在嘗試編寫一個客戶端應用程序,該應用程序連接到一個簡單的服務器,它使用Gtk2迴應接收到的內容,我不知道如何處理它。我想在不使用線程的情況下進行異步讀/寫,但我不確定什麼是最好的方法。 API參考沒有多大幫助 - GIOChannel,GIOStream,GSocketClient等 - 使用哪一個?gtk網絡教程/資源/例子

後退將是在另一個線程中使用阻塞IO。

我對便攜性不感興趣。如何讓GTK/GLib開發者期望人們在沒有良好文檔的情況下使用他們的框架?爲什麼我甚至打擾我可以使用QT來做到這一點我不想學習更多C,這就是爲什麼我打擾!」

+0

如果你在學習東西,爲什麼不嘗試直接使用裸套接字API?它將教你如何在網絡幕後進行網絡工作,並教你更多關於高級API的工作原理,還將幫助你理解當高級API出現問題時。 –

+0

我知道如何使用低級別的API。我想做異步IO不阻止主UI。我也不太喜歡線程,因爲我不知道如何使用它們 –

+0

您認爲異步套接字在這些API中的作用如何?他們讓他們不被阻塞。這只是一個函數調用來創建套接字[非阻塞](http://www.kegel.com/dkftpbench/nonblocking.html),另一個是['poll'](http://linux.die。 net/man/3/poll),如果有數據可以被讀取或者新的連接被接受。 –

回答

4

我使用的功能是g_socket_client_new(),g_socket_client_connect_async(),g_socket_client_connect_finish()

然後g_io_stream_get_input_stream()g_io_stream_get_output_stream()獲取流並進行真正的發送和接收。

如果你真的需要它,我周圍可有一些示例代碼...

+0

這就是我正在尋找的,只是一些指針。非常感謝你! –

+0

雖然有一個問題,您是否完全使用GIOChannel,或者應該在何時使用該類。謝謝 –

+0

我對GIOChannel和其他所有人都有同樣的懷疑。在做了一些工作之後,我的結論是GIOChannel將被當作一個FD和選擇/輪詢的GLi​​b包裝器:它在FD可讀/可寫時調用一個回調函數,這對於管道或字符設備來說是很好的,對於例)。但是GIO是一個完整的封裝API,用於處理輸入/輸出,比如更適合編寫完整的網絡客戶端/服務器。 – rodrigo