2012-03-16 86 views
0

我正在开发C中的客户端服务器程序。服务器支持来自同一端口的多个连接,并为每个连接的客户端创建一个新进程。客户端能够向服务器发送多个命令并从那里获取结果。其中一个命令是'get',用于将任何文件从服务器传输到客户端。 (如获取abc.txt bcd.pdf ...)。来自同一客户端的多个连接

但是,这个传输操作应该在不同的线程中完成。例如,如果客户端请求从服务器传输3个文件;服务器端和客户端都创建了3个不同的线程。因此,客户端将创建client_thread1,client_thread2,client_thread3,服务器将为这些文件创建server_thread1,server_thread2,server_thread3。然后第一个文件将被server_thread1上传到client_thread1,第二个文件将被server_thread2上传到client_thread2等等。

这是我坚持的唯一观点。我如何使用客户端线程来匹配服务器线程;以便服务器线程只与客户端线程进行通信,而服务器和客户端则自由地完成自己的工作。

感谢您的帮助。

+4

FWIW,为每次传输创建一个线程是一个非常糟糕的主意,如果你想这个扩展。有关替代方法,请参阅http://www.kegel.com/c10k.html。 – 2012-03-16 19:26:32

+0

为什么?同时传输三个文件的速度并不比传输速度快得多。网络是瓶颈,你不能多线程。 – EJP 2012-03-18 22:06:52

回答

1

如果你想在文件传输之间取得独立的进展,那么你必须打开多个连接到你的服务器。所以你会为命令通道设置一个单独的套接字,并为每个并发文件传输设置一个套接字。然后,您可以从一个单独的线程(坏,如上所述)或使用诸如poll之类的东西来服务每个套接字以在一个线程上复用套接字处理。就像这样,你重写了FTP :)

或者,你可以想出一些方案来复用一个套接字上的几个文件传输。

相关问题