2012-01-20 7 views
3

지금 어디서 좋은 튜토리얼/코드 샘플을 gtk/glib 네트워킹에 관한 찾을 수 있습니다. Gtk2를 사용하여 수신 한 내용을 반향하는 간단한 서버에 연결하는 클라이언트 응용 프로그램을 작성하려고하는데이 문제를 해결하는 방법을 모르겠습니다. 스레드를 사용하지 않고 비동기 읽기/쓰기를 원하지만 가장 좋은 접근 방식이 무엇인지 잘 모르겠습니다. API 참조는별로 도움이되지 않습니다 - GIOChannel, GIOStream, GSocketClient 등 - 어느 것을 사용할 것입니까?gtk 네트워킹 튜토리얼/리소스/예제

폴백은 다른 스레드에서 블로킹 IO를 사용하는 것입니다.

저는 휴대성에 관심이 없습니다.

"Rant : GTK/GLib 개발자는 사람들이 훌륭한 문서없이 프레임 워크를 사용하기를 기대합니까? QT를 사용하여 작업 할 수있는 이유는 무엇입니까? 더 배우기가 어렵습니다. ! "

+0

물건을 배우려면 직접 베어 소켓 API를 사용하지 않으시겠습니까? 배후에서 네트워킹이 어떻게 작동 하는지를 가르쳐 주며, 더 높은 수준의 API가 작동하는 방법에 대해 더 많이 가르쳐 줄 것이며, 높은 수준의 API에서 문제가 발생했을 때 당신의 이해를 도울 것입니다. –

+0

저수준 API 사용법을 알고 있습니다. 기본 UI를 차단하지 않도록 비동기 IO를 수행하려고합니다. 나는 또한 쓰레드를 너무 좋아하지 않는다. 왜냐하면 내가 어떻게 쓰는지 모르겠다. –

+0

비동기 소켓은 어떻게 그 API에서 작동한다고 생각하니? 그들은 그것들을 _ 차단하지 못하게 만듭니다. 이것은 socket [non-blocking] (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를 둘러싼 GLib 래퍼 (wrapper)와 select/poll으로 힘들어 야합니다. FD가 읽기/쓰기가 가능할 때 콜백을 호출합니다. 그게 전부입니다 (파이프 나 문자 장치, 예). 하지만 GIO는 입출력을 처리하기위한 완전한 래퍼 API이며, 예를 들어 전체 네트워크 클라이언트/서버 작성에 더 적합합니다. – rodrigo