我需要接受到同一个端口的多个连接。我在 C++ 中使用套接字,我想做一些类似于 SSH 的事情。我可以执行 ssh user@machine "ls -lathrR /" 并在同一台机器上运行另一个命令,即使第一个命令仍在运行。
我怎样才能做到这一点?
谢谢。
我需要接受到同一个端口的多个连接。我在 C++ 中使用套接字,我想做一些类似于 SSH 的事情。我可以执行 ssh user@machine "ls -lathrR /" 并在同一台机器上运行另一个命令,即使第一个命令仍在运行。
我怎样才能做到这一点?
谢谢。
你想要的是一个多线程套接字服务器。
为此,您需要一个主线程来打开一个套接字来监听(并等待传入的客户端连接)。这必须进入某种while循环。
然后,当客户端连接到它时,该accept()
函数将解除阻塞,此时您需要通过将请求传递给将处理它的线程来服务客户端请求。
服务器端将循环返回并等待另一个连接,而前一个线程继续执行其任务。
您可以根据需要创建线程,也可以使用可能更高效的线程池(节省初始化新线程的时间)。
在这里查看更多详细信息。在网络上寻找多线程服务器套接字,特别是bind()
从服务器端。listen()
accept()
你需要阅读::listen()
和::accept()
。
前者将设置您的套接字进行侦听。然后,您需要一个循环(可能在它自己的线程中),它使用::accept()
它将在每次新连接到达时返回。
然后该循环应该生成一个新线程,您应该将接收到的文件描述符传递给该线程,::accept()
然后从那里处理该套接字上的所有 I/O。
老问题很老,但我觉得没有人回答理解OP的问题。
您误解了 ssh 的工作原理。当您通过 ssh 向服务器发送多个命令/多个连接时,实际上您要连接的服务器上只有一个程序正在接收所有这些命令。
sshd(ssh 守护进程)在服务器上运行,是一个多线程套接字服务器(参见 fduff 的回答)。这是唯一侦听端口 22 并自行处理所有传入 ssh 连接的程序。