컴퓨터 지식 네트워크 - 컴퓨터 프로그래밍 - 인터넷 인스턴트 채팅 도구는 어떻게 구현되나요?

인터넷 인스턴트 채팅 도구는 어떻게 구현되나요?

다음과 같습니다:

소프트웨어는 P2P 방식을 채택합니다. 각 클라이언트는 채팅에 직접 메시지를 보내고 서버는 코디네이터 역할만 합니다(하이브리드 P2P).

1. 세션 프로세스 설계

새 사용자가 자신의 클라이언트를 통해 시스템에 로그인하면 서버에서 현재 온라인 사용자 정보 목록을 가져옵니다. 시스템의 사용자입니다. 사용자는 독립적으로 작업을 시작하고 서버를 통하지 않고 독립적으로 다른 사용자에게 메시지를 보낼 수 있습니다. 새로운 사용자가 가입하거나 온라인 사용자가 나갈 때마다 서버는 즉시 메시지를 보내 시스템의 다른 모든 사용자에게 알리고 사용자 정보 목록을 실시간으로 업데이트할 수 있습니다.

위의 아이디어에 따라 시스템 세션 흐름은 다음과 같이 설계되었습니다.

(1) 사용자는 클라이언트를 통해 시스템에 들어가서 서버에 메시지를 보내고 요청합니다. 로그인합니다.

(2) 요청을 받은 후 서버는 사용자의 가입을 수락하는 데 동의한다는 응답 메시지를 클라이언트에 반환하고 우연히 서비스 스레드가 있는 수신 포트 번호를 사용자에게 알려줍니다. 위치하고 있습니다.

(3) 클라이언트는 서버 응답에 제공된 포트 번호에 따라 서버와 안정적인 연결을 설정합니다.

(4) 서버는 이 연결을 통해 새로 추가된 클라이언트에 현재 온라인 사용자의 목록 정보를 전달합니다.

(5) 클라이언트는 온라인 사용자 목록을 얻은 후 다른 온라인 사용자와 독립적으로 통신할 수 있습니다.

(6) 사용자가 시스템을 종료하면 즉시 서버에 알려야 합니다.

2. 사용자 관리

시스템에는 서버와 클라이언트 모두 처음 로그인할 때 클라이언트의 사용자 목록을 서버에서 가져옵니다. . 프로그램이 실행되는 동안 서버는 시스템 내 사용자의 변화를 실시간으로 각 회원 사용자에게 온라인으로 알리는 역할을 담당합니다.

새 사용자가 로그인하면 서버는 사용자 테이블을 해당 사용자에게 전달하고 시스템의 각 구성원에게 "로그인" 메시지를 브로드캐스트합니다. 각 구성원은 사용자 테이블을 수신한 후 업데이트합니다.

마찬가지로 사용자가 시스템에서 로그아웃하면 서버는 각 사용자에게 즉시 이 메시지를 전송합니다. 이를 위해서는 각 사용자가 로그아웃하기 전에 서버에 알려야 합니다.

3. 프로토콜 설계

3.1 클라이언트 및 서버 세션

(1) 로그인 프로세스.

클라이언트는 익명 UDP를 사용하여 서버에 메시지를 보냅니다:

로그인, 사용자 이름, localIPEndPoint

메시지 내용에는 3개의 필드가 포함되어 있으며 각 필드는 구분되어 있습니다. ", " 구분: "login"은 로그인을 요청하는 것을 의미하고 "username"은 사용자 이름이고 "localIPEndPoint"는 클라이언트의 로컬 주소입니다.

수신 후 서버는 익명 UDP로 다음 메시지를 반환합니다.

Accept, port

이 중 "Accept"는 서버가 해당 포트를 수락했음을 의미합니다. request; "port"는 서비스가 있는 포트입니다. 서비스 스레드는 이 포트에서 가능한 클라이언트 연결을 수신합니다.

서버에 연결하여 사용자 목록 가져오기:

클라이언트는 이전 세션의 "port" 필드 값에서 서비스 포트를 결정한 다음 TCP 연결을 시작합니다. 포트를 지정하고 서버에 사용자 목록을 요청하면 서버는 연결을 수락한 후 사용자 목록을 클라이언트에 전송합니다.

사용자 목록의 형식은 다음과 같습니다:

username1, IPEndPoint1; username2, IPEndPoint2 ....;end

username1, username2.. ...는 사용자 이름, IPEndPoint1, IPEndPoint2...입니다. 해당 엔드포인트입니다. 각 사용자의 정보는 "사용자 이름 + 엔드포인트"로 구성되며, 사용자 정보는 ";"으로 구분되며 전체 사용자 목록은 "end"로 끝납니다.

3.1 서버 조정 및 사용자 관리

(1) 신규 사용자 가입 알림.

시스템에 이미 존재하는 모든 사용자는 현재 사용자 테이블을 갖고 있으므로 새로운 구성원이 가입할 때 서버는 시스템의 각 구성원에게 사용자 테이블을 반복적으로 전송할 필요가 없습니다. 새로운 회원 가입 회원 정보는 시스템의 다른 사용자에게 전달되고, 그들은 각자 자신의 사용자 테이블을 업데이트합니다.

서버는 시스템의 사용자에게 다음 메시지를 브로드캐스팅하고 보냅니다.

엔드포인트 필드는 "remoteIPEndPoint"로 기록됩니다. 이는 원격 사용자 터미널이 로그인되었음을 의미하며, 로컬 클라이언트 스레드는 이에 따라 사용자 목록을 업데이트합니다. 실제로 이 과정에서 서버는 단순히 수신된 "로그인" 메시지를 전달합니다.

(2) 사용자 종료.

새 회원이 가입할 때와 동일하게 서버에서 사용자의 종료 메시지를 직접 브로드캐스트하고 전달합니다:

logout, username, remoteIPEndPoint

이 중 "remoteIPEndPoint" "는 시스템을 종료한 원격 사용자 터미널의 끝점 주소입니다.

3.1 사용자 단말기 간 채팅

사용자가 채팅할 때 각 클라이언트는 동일하고 독립적이며 서버와 직접 상호 작용하지 않습니다.

4. 시스템 구현

4.1 서비스 스레드

시스템이 실행된 후 서버가 먼저 서비스 스레드를 시작합니다. "시작" 버튼을 클릭하면 됩니다. .

인스턴트 채팅 소프트웨어는 두 명 이상의 사용자 간에 인스턴트 메시지를 전송할 수 있는 네트워크 소프트웨어입니다. 대부분의 인스턴트 채팅 소프트웨어는 연락처 목록을 표시하고 연락처가 온라인 상태인지 여부를 표시할 수 있습니다. 사용자가 말하는 모든 단어는 실시간으로 양쪽 화면에 표시됩니다.

上篇: N.I.S.T. 표준은 무엇인가요? 下篇: Grand Theft Auto San Andreas에서 클레오는 누구인가요?
관련 내용