每次C客户机运行时生成唯一的随机数

每次C客户机运行时生成唯一的随机数,c,random,numbers,client-server,unique,C,Random,Numbers,Client Server,Unique,我试图用C编写一个客户机/服务器应用程序,其中每个客户机向服务器发送一个特定的值(一个随机生成的1到50之间的数字)。 但问题是,每个客户机向服务器发送相同的随机数 这是客户端代码的一部分: srand(time(NULL)); id=rand()%50 + 1; 我确实理解,因为每次客户端运行时,种子都被设置为相同的值,这可能就是为什么存在相同的随机数的原因 有人能提出一种方法来纠正这个问题吗?例如,您可以将客户的id(用于识别每个客户的东西)添加到种子中,再添加到您已经使用的时间中。通过

我试图用C编写一个客户机/服务器应用程序,其中每个客户机向服务器发送一个特定的值(一个随机生成的1到50之间的数字)。 但问题是,每个客户机向服务器发送相同的随机数

这是客户端代码的一部分:

srand(time(NULL));
id=rand()%50 + 1; 
我确实理解,因为每次客户端运行时,种子都被设置为相同的值,这可能就是为什么存在相同的随机数的原因


有人能提出一种方法来纠正这个问题吗?

例如,您可以将客户的id(用于识别每个客户的东西)添加到种子中,再添加到您已经使用的时间中。通过这种方式,您应该获得唯一的随机种子,因此每个客户端也会有不同的随机数。

请尝试以下方法:

srand(clock());
time()
函数使用秒精度。如果所有4个客户端之间几乎没有间隔或完全并行地执行(即,所有客户端在
time()
返回的同一秒内有效运行),那么这可能不够细粒度。
clock()
函数提供了更好的时间分辨率

值得注意的是,C语言与当今大多数语言不同;)-几乎没有任何启动开销(与运行时管理的语言相比,等等)。因此,每个程序在被shell脚本调用后几乎立即开始执行


备选方案。另一个解决方案是完全忘记使用时间/时钟作为种子。只需在脚本中为这4个实例中的每一个传递一个唯一的整数作为命令行参数,并将其用作种子或客户端id

您是否在每个线程中调用
srand()
?如果是这样,在所有线程开始之前不要调用它一次。我正在尝试在客户端生成随机数。因此,每次执行新客户机时,srand函数也会执行。(我刚刚看到我的问题的前一个标题是错误的,并对其进行了编辑。非常抱歉,如果这让你感到困惑的话)客户都有自己的程序吗?每个程序应该只调用
srand()
,一旦它打算查看随机数生成器,您只能对它进行一次种子设定(通常在设置过程中)。有一个客户端程序和一个服务器程序。因此,为了获得4个客户机,我使用script.sh文件执行了4次客户机程序。每个客户端生成一个随机数并发送到服务器。。然后,服务器为每个客户机创建一个新线程,并接受客户机发送的消息。只要每个客户机不是在同一秒内同时执行,则每个客户机的种子将不同。