소켓 기술을 사용하여 온라인 채팅방 및 개인 채팅 기능을 구현하면 특정 콘텐츠는 다음과 같습니다.
더 이상 고민하지 않고 사진을 찍어 보자.
1. 채팅방 그룹 채팅 페이지
온라인 사용자의 연락처 목록
소켓 연결 페이지
개인 채팅 페이지
프로젝트 소개
서버와의 소켓 연결 구현 : 각 클라이언트가 서버에 연결하면 서버가 목록 컬렉션에 연결된 각 소켓을 저장합니다.
그룹 채팅 기능 : 사용자가 그룹 채팅 메시지를 서버로 보낼 때 서버는 모든 정보를 목록 목록의 모든 연결된 클라이언트에 전달합니다.
개인 채팅 기능 : 사용자가 개인 채팅 정보를 서버로 전송 한 후 서버는 메시지를 대상 IP로 보냅니다.
온라인 연락처 목록 표시 : 새 사용자가 성공적으로 로그인하면 서버는 JSON 문자열 형태로 온라인 연락처 정보를 클라이언트에게 보내고 클라이언트는 JSON 문자열을 구문 분석하여 온라인 연락처 정보를 얻습니다.
강력한 클래스 COTCETEVENT 사용자 정의 : 클라이언트는 서버와 통신 하고이 클래스를 통해 데이터를 저장 한 다음 FastJSON 도구를 사용하여 클래스 객체를 전송을 위해 JSON 문자열로 변환합니다.
공개 클래스 socketevent {private int type = 0; 개인 문자열 msg = ""; 개인 문자열 keyip = ""; // 키 IP 개인 문자열 temporaryip = ""; // 임시 IP public pocletevent () {} public int gettype () {return type; } public void settype (int type) {this.type = type; } public String getMsg () {return msg; } public void setmsg (문자열 msg) {this.msg = msg; } public String getKeyip () {return keyip; } public void setkeyip (String keyip) {this.keyip = keyip; } public String getTemporaryIP () {return temporaryip; } public void settemporaryip (String temporaryip) {this.temporaryip = temporaryip; }}유형 : 서명 현재 전송 된 정보 유형. 서버 및 클라이언트 구문 분석 데이터는 어떤 유형의 메시지가 속한 지 결정하는 데 사용됩니다.
공개 정적 최종 int chat_private = 111; // 비공개 채팅에 대한 지시 공개 정적 최종 int chat_group = 222; // 그룹 채팅에 대한 지시 공개 정적 최종 int socket_success = 333; // 성공적인 소켓 연결을위한 명령어 공개 정적 최종 int socket_fail = 444; // 실패한 소켓 연결에 대한 명령어 공개 정적 최종 int connect_success = 666; // 성공적인 소켓 연결을위한 명령어 공개 정적 최종 최종 int connect_fail = 777; // 소켓 연결에 대한 명령이 실패한 공개 정적 최종 int login_arg = 888; // 소켓은 새 사용자 공개 정적 최종 최종 int cancel_arg = 999의 로그인에 서명하기위한 명령을받습니다. // 사용자의 로그인에 서명하기위한 명령 공개 정적 최종 최종 int new_client = 3332; // 새 사용자의 로그인에 서명하기위한 명령 공개 정적 최종 int All_Client = 3432; // 모든 온라인 사용자의 로그인에 서명하기위한 명령 공개 정적 최종 int send_private = 5666; // 개인 채팅 메시지를 전송하기위한 명령 공개 정적 최종 int send_iplist = 6666; // 로그인 사용자 IP 컬렉션을 보내는 지시 사항
KeyIP : 클라이언트 메시지 개시 자의 IP 주소
온도 : 임시 IP 주소. 개인 채팅 유형 인 유형 인 경우이 IP는 대상 연락처의 IP 주소를 나타냅니다.
서버 코켓
1. 클라이언트 연결을받습니다
Socket Socketclient = server.accrect ();
2. 스레드를 켜서 클라이언트로부터 정보를 실시간으로 받으십시오.
// 클라이언트가 보낸 데이터를 실시간으로 가져옵니다 @Override public void run () {try {while (true) {if ((acceptline = in.readline ())! = null) {system.out.println ( "<수신 된 메시지는>" + acceptline); socketevent event = json.parseobject (acceptline, socketevent.class); switch (event.getType ()) {case utilfactory.chat_group : sendmsgavoid (event.getKeyip (), acceptline); 부서지다; case utilfactory.send_private : event.settype (utilfactory.chat_private); sendmsgtarget (event.gettemporaryip (), json.tojsonstring (event)); 부서지다; }}}} catch (예외 e) {e.printstacktrace (); }}
3. 지정된 IPS에 메시지를 보내는 방법 및 자신의 IP를 제외한 다른 모든 IP에 메시지를 보내는 메소드.
// 지정된 IP 주소로 메시지를 전송 개인 void sendmsgtarget (String targetip, string msg) {int num = mlist.size (); for (int index = 0; index <num; index ++) {socket msocket = mlist.get (index); 문자열 ip = msocket.getInetAddress (). gethostAddress (); if (ip.equals (targetIP)) {printwriter pout = null; try {pout = new printwriter (new bufferedWriter (new outputStreamWriter (msocket.getOutputStream (), "utf-8"), true); pout.println (msg); // 종료 메소드 리턴; } catch (ioexception e) {e.printstacktrace (); }}}}} // 개인 void void sendmsgavoid를 보내십시오 (String Revip, String msstring) {int num = mlist.size (); for (int index = 0; index <num; index ++) {socket msocket = mlist.get (index); 문자열 ip = msocket.getInetAddress (). gethostAddress (); if (! ip.equals (피하기)) {printwriter pout = null; try {pout = new printwriter (new bufferedWriter (new outputStreamWriter (msocket.getOutputStream (), "utf-8"), true); pout.println (msstring); } catch (ioexception e) {e.printstacktrace (); }}}}클라이언트는 MainActivity의 서버의 모든 정보를 수용하고 유형에 따라 다시 포장하며 EventBus를 사용하여 각 조각을 표시하여 디스플레이를 보냅니다.
@SubScribe (strookScribe (ThreadMode = ThreadMode.Main) public void privateChat (socketevent event) {switch (event.getType ()) {case myApplication.chat_private : // 메시지를 개인 채팅 룸 chatmessagebean bean에 게시합니다. bean.setmsg (event.getmsg ()); bean.setName (event.getKeyip ()); bean.settype (chatmessagebean.others_arg); eventBus.getDefault (). post (bean); 부서지다; case myApplication.send_private : sendmsg (json.tojsonstring (event)); 부서지다; }}위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.