2 세트의 데이터를 서버에 주기적으로 보내야하는 멀티 스레드 소켓 프로그램을 만들고 있습니다. 클라이언트는 매 3 초마다 GPS 정보를 전송하고 매 4 초마다 극성 정보를 전송해야합니다. 이것을 구현하는 것에 대한 나의 생각은 새로운 스레드를 만들고, 무한 루프를 만들고, GPS 정보를 보내고, sleep()을 1 초 동안 보내고, 극성 정보를 보내고 (2 초 동안) sleep()하는 것입니다. 이것이 이것에 관해 갈 수있는 충분한 방법일까요? 죄송합니다. 소켓 프로그래밍을 처음 접해서 다른 방법을 모릅니다.C에서 클라이언트에서 서버로 주기적으로 데이터 보내기
답변
귀하의 제안 된 방법은 다음과 같습니다
동안 잠 후, 1 초 동안 GPS 정보, 잠을 보내 극성 정보를 전송하고 있음 리드 :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; 몇 초, 두 GPS 극성이 전송되어야한다는 슬립 1
- 슬립 1
- 슬립 1
참고.
두 가지 방법 중 하나로이 문제를 해결할 수 있습니다. 쓰래드를 전혀 사용하지 않는다고 가정 할 때, 두 개의 쓰레드를 사용한다. 하나는 3 초 대기 상태이고, 다른 하나는 4 초 대기 상태이다. 뮤텍스가있는 소켓에 대한 액세스를 조정하여 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
필자가 보여준 코드는 유효한 정수의 범위를 제외하고는 간격 ('i_gap'과'i_pol')에 임의의 값을 적용 할 수 있습니다. 또한 약간의주의와 일부 함수 포인터를 사용하여 임의의 수의 메시지 유형을 처리하도록 일반화 할 수 있습니다. 4 초와 8 초의 간격이 있다면 조금 더 세게 생각해야하지만, 8 초 작업을 원할 때 4 초 작업을 0, 4, 8, 12, 16, 20, ...에 수행하려고합니다. 2, 10, 18, ...에서 발생합니다. –
- 1. Node.js의 클라이언트에서 서버로 데이터 보내기
- 2. 클라이언트에서 서버로 날짜 보내기
- 3. 클라이언트에서 서버로 메시지 보내기
- 4. 클라이언트에서 서버로 주기적으로 데이터를 보내는 방법
- 5. 클라이언트에서 서버로 GSON 문자열 보내기
- 6. socket.io의 클라이언트에서 서버로 이미지 보내기
- 7. 클라이언트에서 서버로 객체 직렬화 보내기
- 8. 클라이언트에서 서버로 무제한 파일 보내기
- 9. 클라이언트에서 서버로 키 스트로크 보내기
- 10. Android : 주기적으로 데이터 보내기
- 11. 클라이언트에서 서버로 데이터 전송
- 12. 하나의 mongodb 서버에서 다른 서버로 주기적으로 데이터 보내기
- 13. Windows 모바일에서 서버로 데이터 보내기
- 14. 클라이언트에서 NodeJS 서버로 블로 브 데이터 함 XHR 보내기
- 15. 클라이언트에서 서버로 보내지는 기본 데이터
- 16. 클라이언트에서 서버로 데이터 hybi 17
- 17. node.js의 클라이언트에서 서버로 데이터 전송
- 18. C# 클라이언트에서 C 서버로 이미지 보내기
- 19. 파이썬에서 클라이언트에서 서버로 다른 파일 보내기
- 20. 사자상의 클라이언트에서 창문에있는 서버로 메시지 보내기
- 21. connection node.js의 클라이언트에서 서버로 메시지 보내기
- 22. 파일 보내기 (클라이언트에서 서버로, 서버에서 클라이언트로)
- 23. 클라이언트에서 서버로 변수 보내기 | JSON 대 POST
- 24. 소켓을 통해 클라이언트에서 서버로 문자열 보내기
- 25. vb.NET 클라이언트에서 C++ 서버로 파일 보내기
- 26. Java 클라이언트에서 서버로 청크 파일 보내기
- 27. Java 소켓 - 클라이언트에서 서버로 파일 보내기
- 28. 서버로 데이터 보내기
- 29. 안드로이드에서 PHP 서버로 데이터 보내기
- 30. android에서 웹 서버로 데이터 보내기
프로그램이 다중 스레드되어야하는 이유는 없습니다. 귀하의 솔루션이 합리적인 것 같습니다. –
이것은 4 초마다가 아니라 3 초마다 극성 정보를 전송합니다. 아니; 그것은 사양을 충족하지 않습니다. 쓰래드를 전혀 사용하지 않는다고 가정 할 때, 두 개의 쓰레드를 사용한다. 하나는 3 초 대기 상태이고, 다른 하나는 4 초 대기 상태이다. 뮤텍스가있는 소켓에 대한 액세스를 조정하여 12 초의 배수에서 여전히 정상적인 동작을 얻습니다. 그러나 적절한 간격을 기다리는 단일 스레드 프로세스로 모든 작업을 수행 할 수 있습니다. 둘 다 전송 한 후, 3 자고, GPS를 보내고, 1은 잠자기, 2는 잔다, 2는 잔다, 2는 잔다, 극성을 보내고, 1은 잔다, GPS는 보내고, 3은 잔다. –
'send'는 모든 데이터를 한꺼번에 보낼 수 없으므로 각각의'send' 주위에 루프가 필요합니다. – alain