gpt4 book ai didi

c - 客户端-服务器之类的应用程序中的线程同步?

转载 作者:行者123 更新时间:2023-11-30 15:58:33 26 4
gpt4 key购买 nike

我一直在开发一个文件下载应用程序,其中服务器不断等待来自客户端的新连接请求,当新连接到达时,服务器接受此连接并创建一个新进程来为最近连接到服务器的客户端提供服务。客户端可以请求从服务器下载多个文件。对于每个文件,客户端和服务器端创建一个新线程,并且每个文件的数据传输应该在服务器和客户端的适当线程对之间进行。我使用 C 和 pthread 作为线程。我现在为每个客户端都有稳定的套接字连接和成功的进程创建。

对于线程文件传输器,我进行了如下尝试:

在客户端中,我正在创建运行接收文件的方法的线程:

        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

附:我知道在一个套接字上创建许多线程没有意义,但是,这是我的硬件,我需要这样做:/。

问候。

最佳答案

最简单的方法是为每个文件打开一个新的套接字。

关于c - 客户端-服务器之类的应用程序中的线程同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9667612/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com