为什么将单独客户端的服务器输出发送到同一终端?

时间:2019-02-17 01:23:58

标签: c++ multithreading tcp server pthreads

我正在为我的操作系统类开发一个客户端-服务器应用程序,该应用程序应该模拟飞机票的销售。我们指示这样做,以便TCP服务器上的主线程正在侦听传入的连接,然后,一旦我们收到客户端连接,就会创建一个新线程来处理该连接。经过一番混乱之后,我相信我的程序处于主要是运行状态。

我现在遇到的问题是,当我从单独的终端运行所有客户端时(无论是2个还是5个或任何其他数字),服务器的所有输出都将进入我启动的最新终端它在。这本身并不是什么大不了的事情,但这也意味着当我使用Ctrl + C关闭在最后一个终端上运行的进程时,它将退出服务器上的所有客户端(这是一个问题)。

所以我的问题是: 1.为什么服务器的所有输出都定向到单个终端,而不是将响应发送到启动每个客户端进程的终端? 2.为什么我在5号航站楼结束该流程后所有客户都退出了?

所有客户端和服务器的终端图片(可能必须在新选项卡中打开才能看到所有内容)。 Client-server terminals

Server.cpp(需要时可以提供其他类Plane.cpp进行编译,但我认为其中没有任何代码与我面临的问题相关):

countries

Client.cpp:

CountryCodes

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

问题在于您使用全局变量。

您的连接线程将对clientSocket的响应写入,您的main随每个连接而变化。每个线程将写入同一套接字。

您需要创建一个类来保存特定于每个连接的数据,并将其中一个新的数据传递给每个线程。 不要使用共享的全局数据来保存特定于线程的值。