【问题标题】:How to synchronize between a thread on server and a thread on client side?如何在服务器上的线程和客户端上的线程之间同步?
【发布时间】:2012-12-28 13:21:12
【问题描述】:

我的应用程序在服务器端和客户端创建文件传输线程。现在我在客户端使用延迟策略(一个简单的 for 循环),以便客户端中的线程创建在服务器中的线程创建过程之后完成

该应用程序运行良好。但这很粗糙,如果不是丑陋的话。我需要找到一种技术方法,以便客户端线程在知道服务器线程已启动之前不会启动。

我尝试使用从服务器到客户端的 send()。客户端的recv() 必须阻止服务器的信号,但显然它没有。客户端控制台上的消息是关于连接被服务器拒绝的。请问有什么提示吗?

【问题讨论】:

  • 套接字未连接不会阻塞它。
  • 我认为您必须使用单独的 tcp/udp 连接进行文件传输。
  • 这些线程是在一个应用程序中,还是在两个不同的应用程序中?您写了“为服务器端和客户端的文件传输创建线程”,这听起来像是您在不同的机器上拥有不同的应用程序。如果是这样,它们是如何开始的?当机器启动文件传输线程时,它们是否已经通过另一个通道进行通信?

标签: c linux pthreads client-server


【解决方案1】:

select() 可能是您正在寻找的东西:您给它一组套接字,它会阻塞,直到这些套接字上发生某些事情(您可以提供超时以避免永远等待)。
调用select() 等待客户端接收到数据,然后调用recv() 确保接收到的是来自服务器的正确消息。

【讨论】:

  • 我建议使用poll 而不是select(参见C10K 问题)。
【解决方案2】:

您似乎使用无连接传输。在这种情况下,我建议玩乒乓球游戏,客户端循环发送“ping”udp 数据包到服务器(有合理的周期),直到客户端从服务器接收到“pong”UDP 数据包或超时。

【讨论】:

    猜你喜欢
    • 2015-04-02
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多