我一直在研究文件下载应用程序,其中服务器连续等待来自客户端的新连接请求,当新连接到达时服务器接受此连接并创建一个新进程以服务最近连接到服务器的客户端。客户端可以请求从服务器下载多个文件。对于每个文件,客户端和服务器端创建一个新线程,并且每个文件的数据传输应在服务器和客户端的适当线程对之间执行。我使用C和pthread为线程。现在,我有稳定的套接字连接和成功创建每个客户端的过程。客户端 - 服务器应用程序中的线程同步?
对于线程文件transer,我曾尝试如下:
在客户端我创建它运行到接收文件的方法线程:
int k;
for (k = 0; k < fNameCounter; k++)
{
pthread_t thread_id;
int status = pthread_create(&thread_id, NULL, &receiveFile, fName);
if (status != 0)
{
printf("Thread Creation Failed \n");
exit(0);
}
}
同样,在服务器端,我创建相同线程数如下:
int k;
for (k = 0; k < fnameCounter; k++)
{
pthread_t thread_id;
int status = pthread_create(&thread_id, NULL, &sendFile, fName);
if (status != 0)
{
printf("Thread Creation Failed \n");
exit(0);
}
}
SENDFILE和receiveFile功能简单的写入和读取由FNAME指定的文件的字节(你可以在看在pthread_create )的插座,在这一点上我有一个大问题:
在这个程序中,只要我想,可能有问题,文件的内容可能是从服务器的所有线程完成接收数据后不同,因为SENDFILE因为readFile函数只是从套接字读取并写入套接字。
我怎么能保证,客户的每个线程服务器的正确的线程得到正确的数据,如我解释如下:
receive send
cthread1 ----> a.txt <----- sthread1
cthread1 ----> a.txt <----- sthread1
cthread1 ----> a.txt <----- sthread1
附:我知道在一个套接字上创建多个线程并不合理,但是,这是我的工作,我需要这样做:/。
问候。
实际上,这是一个课程项目,因此我需要这样做。此外,我知道使用线程是毫无意义的,因为我将为每个客户端提供一个套接字,但我没有选择:)并且真的陷入了同步问题。 – StM 2012-03-12 13:26:34
请编辑您的问题以使您的约束更加清晰:使用单个套接字和两侧的多个线程并行发送多个文件。提及这是一项任务,而且这种条件无论如何效率都不可谈判。 – 2012-03-12 13:31:40