- 浏览: 180012 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
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 1318如果你用过 Openfire的User Impo ... -
openfire集成现有系统的用户表
2010-04-09 09:34 3664openfire 3.6.4版本集成现有系统用户表: ins ... -
注册of为window服务
2009-08-13 16:40 850openfire-service /install -- 安装 ... -
smack presence问题
2009-07-22 17:29 2218Roser#getPresence(String user) ... -
openfire插件开发
2009-07-22 15:05 1027http://www.igniterealtime.or ... -
openfire资源
2009-06-29 15:30 1547http://sourceforge.net/projects ... -
Component vs IQHandler
2009-06-27 12:41 1597When creating a component you a ...
相关推荐
android studio 基于XMPP,Openfire,Smack聊天demo 基于openfire3.9.3
关于XMPP协议的smack开源框架源码分析,附带demo,注释,写的不是很好,有待完善,后期会上传
基于最新的 smack4.1 androidstudio开发demo 可以登录 已验证
smack 在4.1.0以后支持android上使用,demo里集成了smack4.1.9在android的使用
最新smack开发包 demo 基于smack4.1开发 包含所需的jar
Android Smack聊天室 Demo,对应博客http://blog.csdn.net/fkingu007/article/details/23281971
openfire即时聊天_smack_3_2_2_demo
基于OpenFire+smack3.0.4 即时通讯Demo
smack4.1.5依赖jar包以及demo (包含 smack4.1.5 JAR所有包,含Test.java demo)
Android smack4.1.4的示例,包括连接,登录,获取好友列表,发送消息等示例
在用smack写demo时,发现官方有很多不提供的jar包,也许用maven可能就直接导进来了,如果你用普通的java项目,官方提供的jar包里面缺少了很多工具jar包, 在这里一并提供了。
最新的 smack4.1.4 android开发demo 可以登录 已验证
SmackTest
Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档
基于openfire服务器利用Xmpp协议在Android上实现即时通讯 内含:smack.jar, smackx.jar, smackx-debug.jar, smackx-jingle.jar
smack用于android移动端的开发,可以结合openfire使用,进行im通信
1)smack api,基于smack官方javadoc制作而成,格式chm,语言english; 2)smack documentation,内容包括Overview,Getting Started Guide等等,格式chm,语言为中文(感谢fhqdddddd的奉献,本文档基于...
Smack中文API文档
smack源码
这个是Smack API的中文版,详细介绍了smack原理,并且有几个小例子在里面