每次 C 客户端运行时生成一个唯一的随机数
Generating an unique random number every time a C client runs
我正在尝试用 C 编写一个 client/server 应用程序,其中每个客户端向服务器发送一个特定值(随机生成的 1 到 50 之间的数字)。
但问题是每个客户端向服务器发送相同的随机数。
这是客户端的部分代码:
srand(time(NULL));
id=rand()%50 + 1;
我确实理解,因为每次客户端运行时种子都设置为相同的值,这可能就是为什么也有相同随机数的原因。
任何人都可以提出纠正此问题的方法吗?
例如,除了您已经在使用的时间之外,您还可以将客户的 ID(用于识别每个客户的东西)添加到种子中。这样你应该得到独特的随机种子,因此每个客户也可以获得不同的随机数。
试试这个:
srand(clock());
time()
函数使用 秒 精度。如果所有 4 个客户端执行时几乎没有间隔 或 完全并行(即所有客户端 运行 在返回的同一秒有效通过 time()
)。 clock()
函数提供了更好的时间分辨率。
值得注意的是,C — 不像现在的大多数语言 ;) — 几乎没有启动开销(与 运行时间管理语言等相比)。因此,每个程序在被 shell 脚本调用后几乎立即开始执行。
备选方案。另一种解决方案是完全忘记使用 time/clock 作为种子。只需在您的脚本中为这 4 个实例中的每一个传递一个 唯一整数 作为命令行参数,然后使用它(作为种子或客户端 ID)。
我正在尝试用 C 编写一个 client/server 应用程序,其中每个客户端向服务器发送一个特定值(随机生成的 1 到 50 之间的数字)。 但问题是每个客户端向服务器发送相同的随机数。
这是客户端的部分代码:
srand(time(NULL));
id=rand()%50 + 1;
我确实理解,因为每次客户端运行时种子都设置为相同的值,这可能就是为什么也有相同随机数的原因。
任何人都可以提出纠正此问题的方法吗?
例如,除了您已经在使用的时间之外,您还可以将客户的 ID(用于识别每个客户的东西)添加到种子中。这样你应该得到独特的随机种子,因此每个客户也可以获得不同的随机数。
试试这个:
srand(clock());
time()
函数使用 秒 精度。如果所有 4 个客户端执行时几乎没有间隔 或 完全并行(即所有客户端 运行 在返回的同一秒有效通过 time()
)。 clock()
函数提供了更好的时间分辨率。
值得注意的是,C — 不像现在的大多数语言 ;) — 几乎没有启动开销(与 运行时间管理语言等相比)。因此,每个程序在被 shell 脚本调用后几乎立即开始执行。
备选方案。另一种解决方案是完全忘记使用 time/clock 作为种子。只需在您的脚本中为这 4 个实例中的每一个传递一个 唯一整数 作为命令行参数,然后使用它(作为种子或客户端 ID)。