2012-10-20 1 views
3

기존 MFC 응용 프로그램을 편집하고 일부 기본 네트워크 기능을 추가해야합니다. 운영 측은 간단한 지시 (1,2,3,4 ...)를 받아야하고 그에 기초하여 어떤 조치를 취해야합니다. 클라이언트는 대기 시간을 가능한 한 빨리 원하기 때문에 당연히 데이터 그램 (UDP)을 사용하기로 결정했습니다.MFC 응용 프로그램에서 UDP 수신 또는 TCP로 전환

그러나 모든 종류의 자료를 읽는 것이 나에게 달려있었습니다. UDP 소켓 (CAsyncSocket)을 MFC에서들을 수 없으며 수신 차단을 호출하고 대기하는 것만 가능합니다. UI 차단은 실제로 똑똑하지 않습니다. 그래서 일부 스레딩 기술을 사용할 수있을 것 같아요,하지만 MFC 경험이있는 사람이 아니기 때문에 어떻게 구현해야합니까?

신뢰성 및 구현 문제를 고려할 때이 질문의 다른 부분은 TCP로 되돌려 야합니다. 나는 UDP가 신뢰할 수 없다는 것을 알고 있지만 실제로는 얼마나 신뢰할 수 없는가? 나는 그것이 최대 50 % 빠르다는 것을 읽었는데, 그것은 나를 위해 많이 필요하다.

참조 내가 사용 : http://msdn.microsoft.com/en-us/library/09dd1ycd(v=vs.80).aspx

+0

지연 시간은 무엇입니까? 명령을 보내거나 명령에 대한 응답을받는 것? – Serge

+0

명령을 보내는 중입니다. 원격 응용 프로그램은 명령을 발행 한 후 즉시 작동해야합니다. –

+0

명령 순서가 적절합니까? – Serge

답변

1

TCP에서 "대기 시간"의 대부분은 초기 연결을 설정하는 데 필요한 핸드 쉐이킹입니다.

클라이언트 응용 프로그램이 MFC 응용 프로그램에서 많은 명령을 요청할 경우 TCP는 간단합니다. 클라이언트는 TCP 연결을 열고 열어 둡니다.

MFC 앱이 다른 클라이언트의 많은 애드혹 명령을 수신한다면 UDP가 적절할 수 있지만 TCP 핸드 셰이크의 약간의 비용을 절약하는 것이 명령 UDP를 버리면 결코 전혀 일어나지 않을 것입니다.

+0

명령은 한 곳에서 시작됩니다. 그러나 "서버"는 더 많은 고객에게 동시에이를 보냅니다. 비용은 얼마입니까? –

+1

TCP를 사용하는 경우 setsockopt (fd, IPPROTO_TCP, TCP_NODELAY, ...)를 통해 Nagle의 알고리즘을 비활성화하는 것을 잊지 마세요. 그렇지 않으면 각 send() 호출에 대해 ~ 200mS 지연이 발생합니다 .. –

+0

@JeremyFriesner - 비활성화 Nagle은 서버가 각 send()에 대한 응답을 생성하지 않을 때 중요합니다.서버가 들어오는 각 메시지에 회신하는 경우에는 아무런 차이가 없습니다. – Roddy

0

CAsyncSocket를 사용하여 MFC에서 UDP 소켓을들을 수없는 이유는 무엇입니까? 나는 그것을하는 코드를 가지고있다. 포트 번호 SOCK_DGRAM 및 FD_READ를 매개 변수로 사용하여 Create()으로 전화하십시오. OnReceive()이 자동으로 호출됩니다. 그렇지 않으면 FD_READ 매개 변수를 사용하여 AsyncSelect()을 호출하여 문제를 해결할 수 있습니다.

관련 문제