Smack 으로 jabber 클 라 이언 트 작성
XMPPConnection connection =
new XMPPConnection(
"jabber.org");
connection.login(
"mtucker",
"password");
connection.createChat(
"[email protected]").sendMessage(
"Howdy!");
tcp 프로 토 콜 이기 때문에 먼저 네트워크 연결 을 만들어 야 합 니 다:
XMPConnection 은 xmpp 서버 와 의 연결 을 만 드 는 데 사용 되 는 클래스 로 ssl 이 필요 하 다 면 SSL XMPConnection 을 사용 합 니 다.
/ .
XMPPConnection conn1 = new XMPPConnection("jabber.org");
// XMPPConnection conn2 = new XMPPConnection("jabber.org", 5222);
// ssl .
XMPPConnection connection = new SSLXMPPConnection("jabber.org");
연결 을 만 들 려 면 사용자 이름과 비밀 번 호 를 사용 하여 로그 인 해 야 합 니 다. XMPConnection. login (String username, String password) 방법 을 사용 할 수 있 습 니 다. 로그 인 이 완료 되면 새로운 Chat 또는 Group Chat 대상 을 만들어 다른 사람과 이 야 기 를 나 눌 수 있 습 니 다.
운영 명부
명 부 는 다른 온라인 사용 자 를 추적 할 수 있 습 니 다. 사용 자 는 그룹 으로 구성 할 수 있 습 니 다. 예 를 들 어 친구, 동료, 그리고 누가 온라인 이 고 누가 온라인 이 아 닌 지 발견 할 수 있 습 니 다.
XMPPConnection.getRoster() , roster .roster , , .
xmpp xml .org.jivesoftware.smack.packet xmpp :message,presence,IQ.Chat GroupChat , . , " " 。
/ presence.Type.UNAVILABLE presence . Presence presence = new Presence(Presence.Type.UNAVAILABLE);
presence.setStatus("Gone fishing");
// . con.sendPacket(presence);
Smack : PacketListener, PacketCollector.
PacketFilter . PacketListener ,packet collector . ,packet listener ,packet collector .Packet collectors and listeners XMPPConnection .
쓰다 Chat 와 Group Chat 에서 메 시 지 를 전달 합 니 다.
수신 메 시 지 를 보 내 는 것 은 통신 소프트웨어 의 핵심 기능 이 라 하 더 라 도 이 임 무 를 완성 하 는 데 두 가지 도움 이 된다.
Chat
Chat 대상 은 두 사용자 사이 에 thread ID 를 사용 하여 새로운 메시지 스 레 드 를 만 듭 니 다. 다음 코드 는 user 를 사용 하여 새로운 Chat 를 만 든 다음 텍스트 메 시 지 를 보 내 는 방법 을 보 여 줍 니 다.
// XMPPConnection "connection".
Chat newChat = connection.createChat("[email protected]");
newChat.sendMessage("Howdy!");
Chat.sendMessage(String) Message , String body, message. , :
// XMPPConnection "connection".
Chat newChat = connection.createChat("[email protected]");
Message newMessage = newChat.createMessage();
newMessage.setBody("Howdy!");
message.setProperty("favoriteColor", "red");
newChat.sendMessage(newMessage);
Chat 대상 은 다른 chat 의 대답 을 듣 는 것 을 허용 합 니 다. 아래 코드 는 앵무새 처럼 말 합 니 다. 그것 은 누구의 말 에 도 똑 같은 대답 을 할 것 입 니 다.
// XMPPConnection "connection".
Chat newChat = connection.createChat("[email protected]");
newMessage.setBody("Hi, I'm an annoying parrot-bot! Type something back to me.");
while (true) {
// .
Message message = newChat.nextMessage();
// .
newChat.sendMessage(message.getBody());
}
위의 코드 는 Chat. nextMessage () 방법 을 사용 하여 다음 message 를 얻 었 습 니 다. 차단 식 입 니 다. 물론 listener 를 추가 하여 메 시 지 를 얻 을 수 있 습 니 다.
GroupChat
그룹 chat 가 사용자 들 과 동시에 채 팅 을 실행 합 니 다. 채 팅 그룹 에 가입 하려 면 닉네임 을 사용 해 야 합 니 다. 다음 코드 는 채 팅 그룹 에 가입 하고 메 시 지 를 보 내 는 방법 을 보 여 줍 니 다.
// XMPPConnection "connection".
GroupChat newGroupChat = connection.createGroupChat("[email protected]");
// "jsmith" .
newGroupChat.join("jsmith");
// .
newGroupChat.sendMessage("Howdy!");
메 시 지 를 보 내 는 것 과 받 는 것 은 Chat 와 비슷 해서 자세히 설명 하지 않 겠 습 니 다.
채 팅 리스트 와 온라인 상태
명단 은 다른 사용자 의 상 태 를 추적 하고 사용 자 를 친구, 동료 등 으로 나 눌 수 있 습 니 다. XMPConnection. getRoster () 방법 으로 Roster 대상 을 얻 을 수 있 지만 로그 인 에 성공 한 후에 야 합 니 다.
로 스 터 실체
모든 사용 자 는 로 스 터 실체 로 묘사 되 어 있 습 니 다. 가방 은 다음 과 같 습 니 다.
별명 (e.g. "Joe").
다음 코드 는 모든 Roster 실체의 정 보 를 출력 합 니 다.
Roster roster = con.getRoster();
for (Iterator i=roster.getEntries(); i.hasNext(); ) {
System.out.println(i.next());
}
우리 도 특정한 실 체 를 얻 는 방법 이나 그룹 을 만 드 는 방법 을 제공 했다.
온라인 상태
모든 사용자 목록 의 대상 은 온라인 상태 입 니 다. Roster. getPresence (String user) 는 Presence 대상 에 게 사용자 의 온라인 상 태 를 설명 합 니 다. 한 사용자 의 presence 는 온라인 이거 나 오프라인 입 니 다. 사용자 가 온라인 에 있 을 때 그들의 presence 는 현재 그들 이 무엇 을 하고 있 는 지 등 추가 정 보 를 포함 할 수 있 습 니 다.그들 은 기꺼이 방해 하지 않 을 것 인가? 친구 명단 과 Presence 의 변 화 를 감청 하 는 것 은 일반적으로 하나의 tree 로 친 구 를 나타 내 는 것 이다.
presence 정 보 는 수시로 변 합 니 다. 물론 명단 의 증가 와 삭제 도 가능 합 니 다. 명단 과 presence 의 변 화 를 감청 하려 면 반드시 RosterListener 를 사용 해 야 합 니 다. 아래 코드 는 어떻게 감청 하고 모든 presence 를 인쇄 하 는 지 보 여 줍 니 다. 보통 클 라 이언 트 소프트웨어 는 사용자 명단 UI 를 업데이트 하 는 코드 를 표시 하여 변 화 를 반영 합 니 다.
final Roster roster = con.getRoster();
roster.addRosterListener(new RosterListener() {
public void rosterModified() {
// Ignore event for this example.
}
public void presenceChanged(String user) {
// If the presence is unavailable then "null" will be printed, // which is fine for this example.
System.out.println("Presence changed: " + roster.getPresence(user));
}
});
사용자 목록 에 추가
사용자 목록 에서 사용 할 수 있 는 허용 모델, 즉 상대방 이 허용 해 야 사용자 명단 에 가입 할 수 있 습 니 다. 이것 은 사용자 의 프라이버시 를 보호 합 니 다. 따라서 사용자 에 가입 하면 상대방 이 요청 을 받 아들 일 때 까지 미결 상태 로 들 어 갑 니 다. 또한 사용자 가 있 으 면 가입 해 주 십시오.이 요청 에 대해 받 아들 이거 나 반대 하 는 대답 을 해 야 합 니 다. Smack 는 세 가지 전략 을 제공 합 니 다.
Smack 은 받 아들 인 패 킷 을 처리 하기 위해 유연 한 프레임 워 크 를 제공 합 니 다.
XMPPConnection 인 스 턴 스 를 만 듭 니 다.
org.jivesoftware.smack.filter.PacketFilter 인 터 페 이 스 는 그 가방 들 을 PacketCollector 에 나 누 어 줄 것 이 라 고 정의 했다. 아니면 Packet Listener. org.jivesoftware.smack.filter 가방 에서 미리 정 의 된 filers 를 찾 았 습 니 다.
// filter . AndFilter filters.
PacketFilter filter = new AndFilter(new PacketTypeFilter(Message.class),
new FromContainsFilter("[email protected]"));
// "connection" XMPPConnection .
// filter PacketCollector .
PacketCollector myCollector = connection.createPacketCollector(filter);
// , packet listener. .
PacketListener myListener = new PacketListener() {
public void processPacket(Packet packet) {
// .
}
};
// .
connection.addPacketListener(myListener, filter);
표준 패 킷 필터
우 리 는 일련의 filter 를 제공 하 였 으 니, 너 는 실현 할 수 있다.
PacketFilter 인터페이스 로 사용자 정의 구현.
Smack 으로 jabber 클 라 이언 트 를 작성 하 는 기본 지식 은 충분 합 니 다. 더 많은 내용 은 공식 자료 와 mail list 를 찾 아 도움 을 요청 하 십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.