Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通常的ftp服务器需要两个线程来进行数据连接和控制连接吗?_Ftp - Fatal编程技术网

通常的ftp服务器需要两个线程来进行数据连接和控制连接吗?

通常的ftp服务器需要两个线程来进行数据连接和控制连接吗?,ftp,Ftp,我正在尝试编写标准的FTP服务器。 我想知道这种情况是否正确 1. On each request of clients, a thread manager makes thread for control connection. 2. When control connection thread receives PORT command, it establishes data connection(active open) 这是通常的解决办法吗?我想知道这一点,因为我必须创建标准的FT

我正在尝试编写标准的FTP服务器。 我想知道这种情况是否正确

1. On each request of clients, a thread manager makes thread for control connection.

2. When control connection thread receives PORT command, it establishes data connection(active open)
这是通常的解决办法吗?我想知道这一点,因为我必须创建标准的FTP服务器

如果你只回答“是”或“不是”,我会很高兴


提前谢谢。

是的,FTP使用两个连接,阅读RFC,维基百科的文章更友好一些,但RFC是圣经


就线程而言,您需要一个线程来侦听传入连接,一个线程来处理控制连接,一个线程来处理数据连接。通过使用select使用异步i/o,您可以在一个线程中完成这一切。

是。或者不是。这取决于您所看到的FTP服务器。Unix的
ftpd
及其大多数变体fork进程,而不是线程。但它仍然需要至少两个,可能需要三个。您说过,“线程1是主线程,线程2是控制连接,线程3是数据连接”???总共3个?一台服务器通常支持多个用户,所以您需要一个主线程来处理传入的连接,它是一个包含侦听的线程。主线程用于侦听。另一个线程用于数据和控制连接好吗?总共2.我打错了。我的问题是。。“增加一个线程用于数据连接是一种常见的解决方案吗?有很多方法,三个线程,一个线程,unix进程。谢谢你的回答。但是我用英语作为第二语言。我部分理解你说的。所以你说有两种解决方案。一种是主线程是listen线程。然后有必要增加两种线程分别用于数据连接和控制连接。第二,我可以使用异步I/o,使用select而不使用线程。对吗?