2017-10-06 8 views
0

임베디드 장치를 개발 중이며 내 장치가 서버/핫스팟으로 작동하도록 네트워크를 생성하는 WiFi 모듈이 있습니다. 이 문제가 발생했습니다. 얼마나 많은 클라이언트가 내 네트워크에 연결되어 있는지 어떻게 알 수 있습니까?Qt를 사용하여 서버에 얼마나 많은 클라이언트가 연결되어 있는지 알 수있는 방법

+0

클라이언트를 호스트에 실제로 어떻게 연결합니까? 질문은 당신에게 분명한 대답을주기에는 너무 모호합니다. –

+0

@GuillaumePaniagua : Wi-Fi를 통해, [분명히]는 아닐 것입니다. Wi-Fi는 단순한 무선 주파수가 아니라 프로토콜 전체 집합임을 기억하십시오. IP 수준에서는 그 중 많은 부분이 보이지 않거나 추상화되어 있지만 여전히 남아 있습니다. – MSalters

+0

클라이언트는 Qt로 개발 한 앱을 통해 wifi를 통해 저에게 연결됩니다.이 앱은 서버로 작동하는 임베디드 장치로 명령을 보냅니다. 내 임베디드 장치에는 buildroot Linux OS가있는 imx6 프리 스케일 칩셋이 있으며 임베디드 보드에서 실행되는 응용 프로그램 (이 장치의 경우 오븐 임)은 Qt 프레임 워크를 사용하여 개발됩니다. 응용 프로그램 클라이언트가 보낸 명령은 예를 들어 내 장치의 온도 설정입니다. 그래서 내 소켓을 열 수있는 클라이언트의 IP를 알고 싶습니다. – sebba23

답변

0

connected 신호의 수에서 disconnected 신호의 수를 뺀 수만큼 간단합니다.

+0

그리고 접속 된 클라이언트의 IP를 알고 싶습니까? – sebba23

+0

@ sebba23 :'peerAddress' (그리고 그들의 TCP 포트를위한'peerPort')를보십시오. – MSalters

0

새 연결을 추가 할 때 +1을 정의하고 둘 중 하나가 연결이 끊어진 경우 -1을 정의하십시오.

더 나은 방법은 소켓 (클라이언트)의 QList를 쉽게 액세스하고 관리하도록 만드는 것입니다.

가져 오기 클라이언트는 다음과 같이 IP :

client = nextPendingConnection(); 
qDebug() << client->peerAddress().toString(); 
+0

@ sebba23 내 대답은 당신이 대답을 수락하거나 upvote, 덕분에 도움이 되었다면. – aghilpro

0

당신이 propably 정말 알고 싶은 것은 앱 많은 활성 사용자를 연결하는 방법입니다. 다른 네트워킹 소프트웨어 또는 멈춤/중단 된 응용 프로그램에 의한 주간 연결을 계산하지 않습니다.

나는 다음을 제안 : 당신이 클라이언트로부터받은 각 명령에 대한

  • , 당신이지도 항목
  • 이지도 항목 키와 소켓 기술자 및 값으로 타임 스탬프를 가지고 갱신/추가.
  • 이제지도를 정기적으로 다시 확인하고 너무 오래된 항목을 제거 할 수 있습니다.

QMap :: count()는 연결된 클라이언트와 활성 클라이언트 수를 제공합니다.

추가 개선 사항으로 socket :: disconnect() 신호에 신호를 첨부하고 시간 초과를 기다리지 않고 즉시 맵에서 항목을 제거 할 수 있습니다.