5

我需要接受到同一个端口的多个连接。我在 C++ 中使用套接字,我想做一些类似于 SSH 的事情。我可以执行 ssh user@machine "ls -lathrR /" 并在同一台机器上运行另一个命令,即使第一个命令仍在运行。

我怎样才能做到这一点?

谢谢。

4

3 回答 3

10

你想要的是一个多线程套接字服务器。

为此,您需要一个主线程来打开一个套接字来监听(并等待传入​​的客户端连接)。这必须进入某种while循环。

然后,当客户端连接到它时,该accept()函数将解除阻塞,此时您需要通过将请求传递给将处理它的线程来服务客户端请求。

服务器端将循环返回并等待另一个连接,而前一个线程继续执行其任务。

您可以根据需要创建线程,也可以使用可能更高效的线程池(节省初始化新线程的时间)。

在这里查看更多详细信息。在网络上寻找多线程服务器套接字,特别是bind()从服务器端。listen()accept()

于 2012-05-23T16:10:31.703 回答
1

你需要阅读::listen()::accept()

前者将设置您的套接字进行侦听。然后,您需要一个循环(可能在它自己的线程中),它使用::accept()它将在每次新连接到达时返回。

然后该循环应该生成一个新线程,您应该将接收到的文件描述符传递给该线程,::accept()然后从那里处理该套接字上的所有 I/O。

于 2012-05-23T15:53:04.867 回答
0

老问题很老,但我觉得没有人回答理解OP的问题。

您误解了 ssh 的工作原理。当您通过 ssh 向服务器发送多个命令/多个连接时,实际上您要连接的服务器上只有一个程序正在接收所有这些命令。

sshd(ssh 守护进程)在服务器上运行,是一个多线程套接字服务器(参见 fduff 的回答)。这是唯一侦听端口 22 并自行处理所有传入 ssh 连接的程序。

于 2013-05-03T14:31:54.113 回答