클라이언트 또는 서버 구성에서 작동하는 TCP 또는 UDP 소켓 유형을 모두 만들고, 들어오는 모든 데이터를 저장하는 동적 버퍼를 통합하여 지연된 액세스를 허용하고, 비동기 이벤트 알림을 제공합니다. 여기서 중요한 교훈 중 하나는 강력하고 신뢰할 수 있는 다중 스레드 코드를 작성하기가 어렵고 오후 1시 예제를 벗어날 수 없으며 올바른 것으로 예상할 수 없다는 것입니다. 이 코드가 올바른지 확인하고 문서화하는 데 며칠을 보냈습니다. KB192570의 장난감 예는 장난감입니다. 장난감 트럭을 사용하여 실제 건설 현장에서 바위를 운반하지 않으며 장난감 예제를 사용하여 견고하고 신뢰할 수 있는 멀티스레딩 코드를 작성하지 않습니다. 장난감 트럭에 큰 바위를 처음 넣으면 깨집니다. 장난감 코드에 실제 응용 프로그램을 처음 넣으면 깨집니다. 다음은 헤더 파일 중 하나에서 발췌한 것입니다. 그것은 분명히 connects.h/connects.cpp 파일을 공유 하는 프로그래머에 의해 의도 된, 하지만 이것은 실제로 달성 되지 않았습니다. 그러나 이 예제를 살펴보십시오: 모르는 사람들을 위해: 콜백은 시스템에서 특정 이벤트가 발생할 때 호출되는 함수입니다. 이 경우 소켓을 통해 들어오는 모든 메시지에 대해 콜백이 호출됩니다. 당신은 메시지를 수신에 대해 걱정할 필요가 없습니다, 당신은 당신이 뭔가를받을 때 자동으로 경고됩니다. 클라이언트 와 서버 소켓 코드는 동일합니다.

클라이언트의 경우 OnAccept 메서드가 호출되지 않습니다. 서버의 경우 OnConnect 메서드가 호출되지 않지만 코드는 그렇지 않으면 동일합니다. 이 프로젝트에서는 단일 모듈을 공통 디렉토리에 넣고 클라이언트와 서버 프로젝트 모두에 포함시켰습니다. 소켓에는 스트림 소켓과 데이터그램 소켓이 가장 많이 사용됩니다. 소켓의 유형은 또한 /usr/include/bits/socket.h 추상 수퍼클래스 CConnectSoc의 두 개의 특수 하위 클래스를 만들었습니다. 그 중 하나는 서버 소켓, CServerSocket에 대한 정보를 보유하고 하나는 클라이언트 소켓, CClientSocket에 대한 정보를 보유합니다. 수신 후 패킷을 처리하기 위해 호출되는 메서드는 소켓 클래스의 SetParentDlg 함수가 호출되어 소켓 이벤트가 발생할 때 대화 상자 클래스에 알림이 수신되도록 합니다. 아래: 네트워크 콜백이 발생하면(OnSend, OnReceive, OnConnect와 같은 가상 메서드는 오류 코드가 무시됩니다. 이것은 분명히 잘못된 것입니다. 이로 인해 연결실패로 인해 클라이언트가 실제로 연결이 있다고 생각하게 되는 경우가 발생했습니다. 이 메서드는 소유자 스레드의 컨텍스트에서 스레드 의 소유자에서 호출 되는 제어 스레드의 메서드입니다. 소유자 스레드의 컨텍스트에서 실행 되는 소켓의 메서드를 호출 합니다.