- 浏览: 185099 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
donggongai:
Blackbaby 写道mazhi4562qq 写道moist ...
openfire集成现有系统的用户表 -
Blackbaby:
mazhi4562qq 写道moistrot 写道哥们,你集成 ...
openfire集成现有系统的用户表 -
mazhi4562qq:
moistrot 写道哥们,你集成成功了吗?我这样集成之后,登 ...
openfire集成现有系统的用户表 -
dxcsingle:
哥们 我如今也遇到这个问题 能讲哈怎么处理么?
openfire集成现有系统的用户表 -
hooktoo:
该例子有很严重的问题,java没释放内存
JNative dll回调函数使用实例
import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.net.ServerSocket; import java.util.ArrayList; import java.util.List; import javax.media.MediaLocator; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPException; import org.jivesoftware.smackx.jingle.IncomingJingleSession; import org.jivesoftware.smackx.jingle.JingleManager; import org.jivesoftware.smackx.jingle.JingleSession; import org.jivesoftware.smackx.jingle.JingleSessionRequest; import org.jivesoftware.smackx.jingle.OutgoingJingleSession; import org.jivesoftware.smackx.jingle.listeners.JingleSessionRequestListener; import org.jivesoftware.smackx.jingle.listeners.JingleTransportListener; import org.jivesoftware.smackx.jingle.media.JingleMediaManager; import org.jivesoftware.smackx.jingle.media.JingleMediaSession; import org.jivesoftware.smackx.jingle.media.PayloadType; import org.jivesoftware.smackx.jingle.mediaimpl.jmf.AudioChannel; import org.jivesoftware.smackx.jingle.mediaimpl.jmf.AudioFormatUtils; import org.jivesoftware.smackx.jingle.nat.ICETransportManager; import org.jivesoftware.smackx.jingle.nat.TransportCandidate; public class JingleAllTheWay extends JPanel { private static final long serialVersionUID = 1L; private static XMPPConnection xmppConnection; private static final String server = "******"; private static String jid = "155******0097@******/spark"; private static JingleManager jm = null; private static IncomingJingleSession incoming = null; private static OutgoingJingleSession outgoing = null; private static JButton admin, call, hangup; // just a simple frame public static void main(String[] args) { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(new Dimension(300, 100)); frame.setLocation(new Point(100, 100)); frame.setTitle("Jingle All The Way"); frame.getContentPane().add(new JingleAllTheWay(), BorderLayout.CENTER); frame.setVisible(true); } public JingleAllTheWay() { // button to log in as sue and set up to call bob admin = new JButton("155******97"); admin.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { login("1552******097", "8525330"); jid = "1366******872@******/spark"; } }); add(admin); // // button to login as bob and set up to call sue // seven = new JButton("seven"); // seven.addActionListener(new ActionListener(){ // public void actionPerformed(ActionEvent e) // { // login("155******097", "1"); // jid="admin@******/Smack"; // } // }); // add(seven); // button to call other person call = new JButton("Call to 136******872"); call.setEnabled(false); call.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (outgoing != null) return; try { System.out.print("被叫JID" + jid); outgoing = jm.createOutgoingJingleSession(jid); outgoing.addTransportListener(new TransportManager()); outgoing.start(); } catch (XMPPException e1) { e1.printStackTrace(); } } }); add(call); // button to hangup the call hangup = new JButton("Hangup"); hangup.setEnabled(false); hangup.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (outgoing != null) { try { outgoing.terminate(); } catch (XMPPException e1) { e1.printStackTrace(); } } if (incoming != null) { try { incoming.terminate(); } catch (XMPPException e1) { e1.printStackTrace(); } } } }); add(hangup); } // login to the server and enable/disable buttons public void login(String username, String password) { // XMPPConnection.DEBUG_ENABLED = true; xmppConnection = new XMPPConnection(server); try { xmppConnection.connect(); xmppConnection.login(username, password); ICETransportManager icetm0 = new ICETransportManager(xmppConnection, "jivesoftware.com", 3478); jm = new JingleManager(xmppConnection, icetm0, new JmfMediaManager()); jm.addCreationListener(icetm0); jm.addJingleSessionRequestListener(new JingleSessionRequestListener() { public void sessionRequested(JingleSessionRequest request) { if (incoming != null) { System.out.println("incoming open"); return; } try { // Accept the call incoming = request.accept(); incoming.addTransportListener(new TransportManager()); // Start the call incoming.start(); } catch (XMPPException e) { e.printStackTrace(); } } }); // make the logins unlogginable and allow user to place a call call.setEnabled(true); admin.setEnabled(false); // seven.setEnabled(false); } catch (XMPPException e) { e.printStackTrace(); } } // handle the jingle calls being connected and disconnected // disabling/enabling buttons private static class TransportManager implements JingleTransportListener { public void transportClosed(TransportCandidate cand) { System.out.println("session closed"); hangup.setEnabled(false); call.setEnabled(true); incoming = null; outgoing = null; } public void transportClosedOnError(XMPPException e) { System.out.println("session closed on error"); hangup.setEnabled(false); call.setEnabled(true); incoming = null; outgoing = null; } public void transportEstablished(TransportCandidate local, TransportCandidate remote) { System.out.println("session created"); hangup.setEnabled(true); call.setEnabled(false); } } // class that returns an instance of another class public static class JmfMediaManager extends JingleMediaManager { private static List<PayloadType> payloads = new ArrayList<PayloadType>(); static { payloads.add(new PayloadType.Audio(0, "PCMU", 16000)); payloads.add(new PayloadType.Audio(3, "gsm")); payloads.add(new PayloadType.Audio(4, "g723")); } @Override public JingleMediaSession createMediaSession(PayloadType payloadType, TransportCandidate remote, TransportCandidate local, JingleSession jingleSession) { return new MediaSession(payloadType, remote, local, null, jingleSession); } @Override public List<PayloadType> getPayloads() { return payloads; } } // not quite sure what this does public static class MediaSession extends JingleMediaSession { private AudioChannel audioChannel; public MediaSession(final PayloadType payloadType, final TransportCandidate remote, final TransportCandidate local, String locator, JingleSession jingleSession) { super(payloadType, remote, local, locator == null ? "dsound://" : locator, jingleSession); initialize(); } @Override public void initialize() { String ip; String localIp; int localPort; int remotePort; if (this.getLocal().getSymmetric() != null) { ip = this.getLocal().getIp(); localIp = this.getLocal().getLocalIp(); localPort = getFreePort(); remotePort = this.getLocal().getSymmetric().getPort(); System.out.println("Initialising: " + this.getLocal().getConnection() + " " + ip + ": " + localPort + "->" + remotePort); } else { ip = this.getRemote().getIp(); localIp = this.getLocal().getLocalIp(); localPort = this.getLocal().getPort(); remotePort = this.getRemote().getPort(); } audioChannel = new AudioChannel(new MediaLocator(this.getMediaLocator()), localIp, ip, localPort, remotePort, AudioFormatUtils.getAudioFormat(this.getPayloadType()), this); } @Override public void setTrasmit(boolean active) { audioChannel.setTrasmit(active); } @Override public void startReceive() { // if this is empty will i not receive audio? } @Override public void startTrasmit() { audioChannel.start(); } @Override public void stopReceive() { } @Override public void stopTrasmit() { if (audioChannel != null) audioChannel.stop(); } protected int getFreePort() { ServerSocket ss; int freePort = 0; for (int i = 0; i < 10; i++) { freePort = (int) (10000 + Math.round(Math.random() * 10000)); freePort = freePort % 2 == 0 ? freePort : freePort + 1; try { ss = new ServerSocket(freePort); freePort = ss.getLocalPort(); ss.close(); return freePort; } catch (IOException e) { e.printStackTrace(); } } try { ss = new ServerSocket(0); freePort = ss.getLocalPort(); ss.close(); } catch (IOException e) { e.printStackTrace(); } return freePort; } } } 参考:http://www.igniterealtime.org/community/message/185575#185575
评论
3 楼
xumiao19871129
2011-10-28
出现异常:
java.net.BindException: Cannot assign requested address: Cannot bind
at java.net.PlainDatagramSocketImpl.bind0(Native Method)
at java.net.PlainDatagramSocketImpl.bind(PlainDatagramSocketImpl.java:91)
at java.net.DatagramSocket.bind(DatagramSocket.java:372)
at java.net.DatagramSocket.<init>(DatagramSocket.java:211)
at java.net.DatagramSocket.<init>(DatagramSocket.java:262)
at de.javawi.jstun.test.demo.ice.Candidate.<init>(Candidate.java:35)
at de.javawi.jstun.test.demo.ice.ICENegociator.testInterface(ICENegociator.java:122)
at de.javawi.jstun.test.demo.ice.ICENegociator.access$000(ICENegociator.java:40)
at de.javawi.jstun.test.demo.ice.ICENegociator$1.run(ICENegociator.java:88)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
java.net.BindException: Cannot assign requested address: Cannot bind
at java.net.PlainDatagramSocketImpl.bind0(Native Method)
at java.net.PlainDatagramSocketImpl.bind(PlainDatagramSocketImpl.java:91)
at java.net.DatagramSocket.bind(DatagramSocket.java:372)
at java.net.DatagramSocket.<init>(DatagramSocket.java:211)
at java.net.DatagramSocket.<init>(DatagramSocket.java:262)
at de.javawi.jstun.test.demo.ice.Candidate.<init>(Candidate.java:35)
at de.javawi.jstun.test.demo.ice.ICENegociator.testInterface(ICENegociator.java:122)
at de.javawi.jstun.test.demo.ice.ICENegociator.access$000(ICENegociator.java:40)
at de.javawi.jstun.test.demo.ice.ICENegociator$1.run(ICENegociator.java:88)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
2 楼
Blackbaby
2011-02-10
185575
啊,我的这个例子是我当时参考igniterealtime论坛上完成的,是可以跑,你换成你的登陆id,然后和spark连下看看,相关资讯最好是在igniterealtime论坛上找啦
tocute 写道
不好意思請教一下
請問有沒有 有關於 smack Jingle 相關的範例呢
目前只有看到 JingleAllTheWay.java
可能是 ice 的問題
所以我一直沒有辦法跟 Gtalk 互聯
想問有沒有相關的資訊可以參考呢??
謝謝你
請問有沒有 有關於 smack Jingle 相關的範例呢
目前只有看到 JingleAllTheWay.java
可能是 ice 的問題
所以我一直沒有辦法跟 Gtalk 互聯
想問有沒有相關的資訊可以參考呢??
謝謝你
啊,我的这个例子是我当时参考igniterealtime论坛上完成的,是可以跑,你换成你的登陆id,然后和spark连下看看,相关资讯最好是在igniterealtime论坛上找啦
1 楼
tocute
2011-01-24
不好意思請教一下
請問有沒有 有關於 smack Jingle 相關的範例呢
目前只有看到 JingleAllTheWay.java
可能是 ice 的問題
所以我一直沒有辦法跟 Gtalk 互聯
想問有沒有相關的資訊可以參考呢??
謝謝你
請問有沒有 有關於 smack Jingle 相關的範例呢
目前只有看到 JingleAllTheWay.java
可能是 ice 的問題
所以我一直沒有辦法跟 Gtalk 互聯
想問有沒有相關的資訊可以參考呢??
謝謝你
发表评论
-
How to reset admin password in openfire
2010-05-04 09:35 1363如果你用过 Openfire的User Impo ... -
openfire集成现有系统的用户表
2010-04-09 09:34 3761openfire 3.6.4版本集成现有系统用户表: ins ... -
注册of为window服务
2009-08-13 16:40 888openfire-service /install -- 安装 ... -
smack presence问题
2009-07-22 17:29 2254Roser#getPresence(String user) ... -
openfire插件开发
2009-07-22 15:05 1063http://www.igniterealtime.or ... -
openfire资源
2009-06-29 15:30 1607http://sourceforge.net/projects ... -
Component vs IQHandler
2009-06-27 12:41 1645When creating a component you a ...
相关推荐
在"XMPP_Smack_Demo_Source"这个压缩包中,包含了使用Smack框架开发的示例源代码,这是一份很好的学习资料,可以帮助开发者深入理解如何利用Smack库进行XMPP协议的实现。虽然描述中提到注释可能不够完善,但通过源码...
这个项目“android studio基于XMPP,Openfire,Smack聊天demo”提供了一个使用Android Studio、XMPP协议、Openfire服务器和Smack库实现的聊天应用示例。以下是关于这些关键技术的详细解释: **XMPP(Extensible ...
在这个"smack4.1 demo androidstudio开发"项目中,我们看到的是一个基于最新版本Smack 4.1的Android Studio示例工程,它已经过登录验证,可以作为学习和快速启动XMPP通信的起点。 首先,我们需要了解XMPP...
在"android_smack4.1.9-demo"项目中,我们能看到如何在Android Studio环境下集成并使用Smack 4.1.9的示例。 **一、Smack 4.1.9的关键特性** 1. **Android兼容性**:Smack 4.1.9优化了对Android平台的支持,包括API...
这个"Smack4.1demo"是一个基于Smack 4.1版本的开发示例,用于帮助开发者理解和使用Smack库进行XMPP应用的开发。在这个压缩包中,可能包含了必要的JAR文件,这些文件是运行和学习Smack 4.1的基础。 Smack 4.1是一个...
**Android Smack聊天室 Demo** 是一个基于Android平台的即时通讯应用示例,它利用了Smack库来实现XMPP协议的功能。这个Demo是开发者在CSDN博客上分享的一个项目,链接为...
在这个“openfire即时聊天_smack_3_2_2_demo”中,我们主要会探讨以下几个关键知识点: 1. **XMPP协议**:XMPP是一种基于XML的开放式即时通讯协议,它提供了一种标准化的方式来交换消息、状态信息以及进行多方聊天...
让我们深入探讨这个“Android+smack4.1.4+openfire demo”所涉及的知识点。 首先,**Smack** 是一个开源的XMPP(Extensible Messaging and Presence Protocol)客户端库,适用于Java和Android平台。XMPP是一种基于...
在这个“OpenFire+smack3.0.4 即时通讯Demo”中,我们将深入探讨这两个组件的集成与应用。 首先,OpenFire是一款用Java编写的开源XMPP服务器,它基于XMPP(Extensible Messaging and Presence Protocol)协议,这个...
在“smack4.1.5依赖jar包以及demo”中,你将找到运行Smack应用所需的所有依赖文件,以及一个名为Test.java的示例代码。 首先,理解Smack的核心组件和功能至关重要。Smack主要包含以下几个部分: 1. **连接管理**:...
描述中提到"最新的smack4.1.4 android开发demo 可以登录 已验证",这表示该版本的Smack库包含了一个演示应用程序,这个演示应用展示了如何使用Smack进行登录操作,并且这个登录功能已经得到了验证,意味着它可以正确...
4. **smackx-jingle.jar**:Jingle是XMPP的一个子集,用于处理多媒体通信,如语音和视频通话。这个库使得Smack能够支持在XMPP网络上的端到端媒体通信。 使用这些库,开发者可以在Android应用中轻松实现以下功能: ...
SmackTest是一个专注于测试和调试Android应用的框架,它提供了丰富的功能来帮助开发者高效地进行应用的质量保证。本文将深入探讨SmackTest的核心概念、主要功能以及如何在实际项目中运用它来提升测试效率。...
**Smack 4.3.1:Android 移动端即时通讯框架** Smack 是一个开源的、跨平台的即时通讯(IM)库,专为实现XMPP(Extensible Messaging and Presence Protocol)协议而设计。在Smack 4.3.1版本中,开发者能够利用这个...
Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档
implementation 'org.igniterealtime.smack:smack-android-extensions:4.3.5' implementation 'org.igniterealtime.smack:smack-tcp:4.3.5' implementation 'org.igniterealtime.smack:smack-im:4.3.5' ...
《Smack文档中文版》是针对Smack开源项目的详尽指南,主要面向开发者和IT专业人士。Smack是一个用Java编写的开源库,用于在XMPP(可扩展消息处理即时协议)上实现即时通讯功能。XMPP是一种基于XML的开放标准,广泛...
Smack API 是一个开源的Java库,专门用于处理XMPP(可扩展消息处理推送协议)通信。这个API为开发者提供了一套丰富的接口和类,使得构建XMPP客户端应用程序变得简单而高效。它允许用户实现即时通讯(IM)、多用户...
Smack 3.2.2 是一个专门针对Linux平台的XMPP(Extensible Messaging and Presence Protocol)库。XMPP是一种开放标准的即时通讯协议,它允许用户进行实时、双向通信,广泛应用于聊天应用、协作工具以及物联网设备...