我正在尝试在C中编写客户端/服务器应用程序,其中每个客户端向服务器发送特定值(随机生成的1到50之间的数字)。 但问题是每个客户端都向服务器发送相同的随机数。
这是客户端代码的一部分:
srand(time(NULL));
id=rand()%50 + 1;
我明白,因为每次客户端运行时种子都设置为相同的值,这也就是为什么同样的随机数也是如此。
有人可以建议一种方法来纠正这个问题吗?
答案 0 :(得分:0)
除了您已经使用的时间之外,您还可以将客户端的ID(用于识别每个客户端的内容)添加到种子中。这样你就可以得到独特的随机种子,因此每个客户也会得到不同的随机数。
答案 1 :(得分:0)
请改为尝试:
srand(clock());
time()
函数使用秒精度。如果所有4个客户端之间几乎没有间隔或完全并行执行(即,所有客户端在time()
返回的同一秒内有效运行),那么这可能不够精细。 。 clock()
函数提供更好的时间分辨率。
值得注意的是C - 与现在的大多数语言不同;) - 几乎没有任何启动开销(与运行时托管语言相比等)。因此,每个程序在被shell脚本调用后几乎立即开始执行。
<强>替代即可。另一种解决方案是忘记将时间/时钟完全用作种子。只需在脚本中为这4个实例中的每一个传递一个唯一整数,作为命令行参数,并使用它作为种子或客户端ID。