【问题标题】:GIO socket client server for multiple clients用于多个客户端的 GIO 套接字客户端服务器
【发布时间】:2013-06-07 06:00:58
【问题描述】:

我想实现一个 GIO 套接字客户端服务器程序,其中服务器可以同时为多达 5 个客户端提供服务。这甚至可能吗?如何修改以下标准服务器以允许多个客户端以线程安全的方式连接? incoming_callback() 函数将从客户端接收数据并进行一些处理并响应确认,这将一直持续到客户端发送“退出”消息,此时服务器将关闭客户端连接。我想为服务器一次最多说 5 个连接执行此操作。有可能吗?如果有,怎么做?

int
main (int argc, char **argv)
{
/* initialize glib */
  g_type_init();

  GError * error = NULL;

  /* create the new socketservice */
  GSocketService * service = g_socket_service_new ();

  /* connect to the port */
  g_socket_listener_add_inet_port ((GSocketListener*)service,
                                1500, /* your port goes here */
                                NULL,
                                &error);

  /* don't forget to check for errors */
  if (error != NULL)
  {
     g_error (error->message);
  }

  /* listen to the 'incoming' signal */
  g_signal_connect (service,
                   "incoming",
                   G_CALLBACK (incoming_callback),
                   NULL);

 /* start the socket service */
 g_socket_service_start (service);

 /* enter mainloop */
 g_print ("Waiting for client!\n");
 GMainLoop *loop = g_main_loop_new(NULL, FALSE);
 g_main_loop_run(loop);
 return 0;
}

【问题讨论】:

    标签: sockets client gio


    【解决方案1】:

    魔法应该发生在您的incoming_callback 中,尽快返回并将工作推到另一个GThread(或者更好的是GThreadPool)

    【讨论】:

      猜你喜欢
      • 2014-08-20
      • 1970-01-01
      • 1970-01-01
      • 2017-02-25
      • 1970-01-01
      • 2011-11-15
      • 1970-01-01
      • 1970-01-01
      • 2011-08-14
      相关资源
      最近更新 更多