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