没有多线程的c++套接字不同步/并行代码

C++ Sockets Unsynched/Parallel Code without Multithreading

本文关键字:同步 并行 代码 套接字 多线程 c++      更新时间:2023-10-16

我用c++编写了这个2-side(客户端和服务器端)程序,这基本上是一个"聊天程序"。

一方向另一方发送数据,另一方向另一方发送数据。我正在使用C-Sockets (TCP/SOCK_STREAM)。

所以我的问题是,虽然服务器正在等待数据("recv()")它本身无法发送数据,因为recv队列是无限的,就我的经验所示。

我已经想到了两种方法来解决这个问题,但我不确定是否值得花时间。因为也许有一个简单的解决办法,只是我太笨了,想不出来。
  1. 使它成为一个六面连接,这意味着我有一个"物理服务器",我的服务器在四个实例中运行,每个客户端两次(发送和接收)。因此,如果一个服务器接收到数据,它将数据存储在文件中,供另一个客户端的发送服务器读取和…发送它。反过来也是一样的。

由于这个解决方案听起来相当糟糕,我可能不会采用它。

  • 使用多线程。我听说这是纯抗癌药物,除非万不得已,否则你不应该使用它。
  • 所以我的问题是,我必须这样做吗?或者有一个简单的解决办法?

    阻塞套接字上的recv()用于当您需要等待传入的数据并且在数据到达之前无事可做时。如果不是您的情况,您可以使用非阻塞套接字,或者选择timeout。select将更简单,只需检查是否有任何东西定期到达您的套接字(例如在循环中),并在两者之间做您想做的事情。

    顺便说一下,它被称为"BSD套接字",而不是"C套接字",这可以帮助你搜索。