我正在创建一个多线程套接字程序,需要定期向服务器发送两组数据。客户端需要每3秒发送一次GPS信息,每4秒发送一次极性信息。我的想法是简单地创建一个新线程,创建一个无限循环,发送()GPS信息,睡眠()1秒,发送()极性信息,然后睡眠()2秒。这是否足以解决这个问题?对不起,我是套接字编程的新手,所以我不知道任何其他方法。定期从客户端向服务器发送数据C
回答
你的提出的方案是:
发送的GPS信息,睡眠持续1秒,发送所述极性信息,然后睡2秒
在一段12秒,即导致:
- GPS;睡眠1
- 极性;睡眠1
- 睡眠1
- GPS;睡眠1
- 极性;睡眠1
- 睡眠1
- GPS;睡眠1
- 极性;睡眠1
- 睡眠1
- GPS;睡眠1
- 极性;睡眠1
- 睡眠1
这发出的GPS信息的4倍(正确的)和极性的4倍,并且每3秒,而不是3次,每4秒作为规范要求。期望的序列可能是:
- GPS;极性;睡眠1
- 睡眠1
- 睡眠1
- GPS;睡眠1
- 极性;睡眠1
- 睡眠1
- GPS;睡眠1
- 睡眠1
- 极性;睡眠1
- GPS;睡眠1
- 睡眠1个
- 睡眠1
注意,在一些二,GPS和极性必须发送。
您可以通过两种方法中的任何一种来实现此目的。假设你需要使用线程,使用两个线程,一个等待三秒钟,一个等待四秒钟。使用互斥锁协调对套接字的访问,以便在12秒的倍数内,仍可以获得理智的行为。
int i_gps = 3;
int i_pol = 4;
int t_gps = 0;
int t_pol = 0;
int t_cur = 0;
while (1)
{
if (t_cur == t_gps && t_cur == t_pol)
{
t_cur = t_gps = t_pol = 0; // Avoid integer overflow
}
if (t_cur == t_gps)
{
send GPS
t_gps += i_gps;
}
if (t_cur == t_pol)
{
send polarity
t_pol += i_pol;
}
sleep 1;
t_cur++;
}
您还可以通过改变代码在循环的结束,以确定哪些发送睡多秒:
但是,你可以用单线程的过程,等待合适的时间间隔做这一切接下来睡觉适当的时间量,并将t_cur
递增适当的时间量(而不是一直使用1秒)。
如果你需要避免漂移(因为上面的代码假设发送过程是瞬时的,而不是),那么你必须使用亚秒睡眠并捕获循环开始时的时间并调整休眠间隔允许花费时间来完成发送。
谢谢,我明白这一点,但GPS是3秒,极性是4秒仅仅是一个例子。如果GPS和极性间隔是其他任意值,我很难考虑如何实现这一点。 – marcusc 2014-12-09 14:54:19
我显示的代码可以适应(或多或少)任意值的间隔('i_gap'和'i_pol'),仅受限于有效整数的范围。它也可以概括为处理任意数量的消息类型,只需要小心一些,并且可以使用一些函数指针。如果您有4秒和8秒的间隔,但您希望4秒钟的操作发生在0,4,8,12,16,20时......您需要考虑更加困难,而您需要8秒钟的操作发生在2,10,18,... – 2014-12-09 15:13:06
- 1. 如何从服务器向特定客户端发送数据?
- 2. 定期将数据从服务器发送到客户端
- 3. C#客户端。从C#客户端发送数据到Java服务器
- 4. 如何从java客户端向c#web服务发送数据
- 5. 如何从客户端向服务器发送数据流?
- 6. 客户端向tcp服务器发送数据,tcp服务器向另一台服务器发送数据
- 7. 从C客户端向服务器发送字符串
- 8. 从服务器发送到客户端
- 9. 从客户端向服务器端发送数据 - 无效JSON PRIMITIVE:位置
- 10. 从客户端向服务器推送/同步数据
- 11. 从C客户端发送一个整数到Java服务器
- 12. 从服务器发送数据到客户端上socket.io
- 13. Socket.io不从客户端发送数据到服务器
- 14. windows RDP从服务器发送数据到客户端?
- 15. 发送数据从服务器到客户端
- 16. 从vb服务器发送数据给客户端
- 17. 将数据从php服务器发送到vb.net客户端
- 18. 从服务器(Java)发送数据到Android客户端
- 19. Java将数据从服务器发送回客户端
- 20. 将图像从C#客户端发送到C服务器
- 21. 如何从服务器向Android客户端发送图片?
- 22. 从服务器向多个客户端发送多条消息
- 23. 从服务器向所有客户端发送邮件
- 24. 如何从PHP服务器向客户端发送DOM树?
- 25. websocket从服务器向所有客户端发送消息
- 26. 通过客户端从服务器发送到服务器的敏感数据
- 27. 从服务器发送消息到客户端c#
- 28. 如何从客户端的数据传送到服务器端
- 29. 如何将数据从客户端(C)发送到服务器(nodejs)?
- 30. 从Web服务器获取数据并将它们发送到客户端C++
我看不出为什么你的程序必须是多线程的。你的解决方案似乎很合理 – 2014-12-07 17:07:56
每3秒发送一次极性信息,而不是每4秒发送一次。没有;它不符合规范。假设你需要使用线程,使用两个线程,一个等待三秒钟,一个等待四秒钟。使用互斥锁协调对套接字的访问,以便在12秒的倍数内,仍可以获得理智的行为。但是,您可以使用等待适当间隔的单线程进程完成所有操作。发送两者之后,它会睡3,发送GPS,睡1,发送极性,睡2,发送GPS,睡2,发送极性,睡1,发送GPS,睡3,发送两者。 – 2014-12-07 17:08:09
'send'可能不会一次发送所有数据,因此您需要在每个'send'周围进行循环。 – alain 2014-12-07 17:08:41