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

时间:2017-11-09 23:35:07

标签: c random numbers client-server unique

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

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

srand(time(NULL));
id=rand()%50 + 1; 

我明白,因为每次客户端运行时种子都设置为相同的值,这也就是为什么同样的随机数也是如此。

有人可以建议一种方法来纠正这个问题吗?

2 个答案:

答案 0 :(得分:0)

除了您已经使用的时间之外,您还可以将客户端的ID(用于识别每个客户端的内容)添加到种子中。这样你就可以得到独特的随机种子,因此每个客户也会得到不同的随机数。

答案 1 :(得分:0)

请改为尝试:

srand(clock());

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

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

<强>替代即可。另一种解决方案是忘记将时间/时钟完全用作种子。只需在脚本中为这4个实例中的每一个传递一个唯一整数,作为命令行参数,并使用它作为种子或客户端ID。