同一端口套接字C ++上的多个连接

时间:2012-05-23 15:44:22

标签: c++ multithreading sockets

我需要接受到同一端口的多个连接。 我在C ++中使用套接字,我想做像SSH这样的事情。 我可以做一个ssh user @ machine“ls -lathrR /”并对同一台机器运行另一个命令,即使第一个仍在运行。

我该怎么做?

感谢。

3 个答案:

答案 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连接。