android - autobahn not working with tomcat 7 websocket -
sorry english.
i want program native app in android connect server interactive comunications. websocket tegnology perfect fothis. have installed , working tomcat 7.0.39 in laptop ip 192.168.1.250. have tryed examples echo, snake, etc , works fine using ws://localhost:8080/.... , using ws://192.168.1.250:8080/...
i'm using autobahn eclipse connect server. have installed apk in android mobile autobahn client websocket sample , connects withn ws://echo.websocket.org.
the problem android server (in laptop) not work. android ws://echo.websocket.org works fine (i supose autobahn example works well), server works fine because de examples comes tomcat work fine.
because have make intesive work information travel between server , clients, can't use javascript on server side, need java servlets or others work databases, files ando on.
what wrong? firewall off, , wireshark show me how android client try connect laptop server ( don't anderstand wireshark info ) connection loses.
this android code:
package com.example.autobahnandroiddemo; import de.tavendo.autobahn.websocketconnection; import de.tavendo.autobahn.websocketexception; import de.tavendo.autobahn.websockethandler; import android.app.activity; import android.content.sharedpreferences; import android.os.bundle; import android.util.log; import android.view.gravity; import android.view.menu; import android.view.menuinflater; import android.view.menuitem; import android.view.view; import android.widget.button; import android.widget.edittext; import android.widget.textview; import android.widget.toast; public class mainactivity extends activity { static final string tag = "de.tavendo.autobahn.echo"; private static final string prefs_name = "autobahnandroidecho"; static edittext mhostname; static edittext mport; static textview mstatusline; static button mstart; static edittext mmessage; static button msendmessage; private sharedpreferences msettings; private void alert(string message) { toast toast = toast.maketext(getapplicationcontext(), message, toast.length_short); toast.setgravity(gravity.center_vertical | gravity.center_horizontal, 0, 0); toast.show(); } private void loadprefs() { mhostname.settext(msettings.getstring("hostname", "")); mport.settext(msettings.getstring("port", "9000")); } private void saveprefs() { sharedpreferences.editor editor = msettings.edit(); editor.putstring("hostname", mhostname.gettext().tostring()); editor.putstring("port", mport.gettext().tostring()); editor.commit(); } private void setbuttonconnect() { mhostname.setenabled(true); mport.setenabled(true); mstart.settext("connect"); mstart.setonclicklistener(new button.onclicklistener() { public void onclick(view v) { start(); } }); } private void setbuttondisconnect() { mhostname.setenabled(false); mport.setenabled(false); mstart.settext("disconnect"); mstart.setonclicklistener(new button.onclicklistener() { public void onclick(view v) { mconnection.disconnect(); } }); } private final websocketconnection mconnection = new websocketconnection(); private void start() { final string wsuri = mhostname.gettext() + ":" + mport.gettext(); mstatusline.settext("status: connecting " + wsuri + " .."); setbuttondisconnect(); try { mconnection.connect(wsuri, new websockethandler() { @override public void onopen() { mstatusline.settext("status: connected " + wsuri); saveprefs(); msendmessage.setenabled(true); mmessage.setenabled(true); } @override public void ontextmessage(string payload) { alert("got echo: " + payload); } @override public void onclose(int code, string reason) { alert("connection lost."); mstatusline.settext("status: ready."); setbuttonconnect(); msendmessage.setenabled(false); mmessage.setenabled(false); } }); } catch (websocketexception e) { log.d(tag, e.tostring()); } } @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); mhostname = (edittext) findviewbyid(r.id.hostname); mport = (edittext) findviewbyid(r.id.port); mstatusline = (textview) findviewbyid(r.id.statusline); mstart = (button) findviewbyid(r.id.start); mmessage = (edittext) findviewbyid(r.id.msg); msendmessage = (button) findviewbyid(r.id.sendmsg); msettings = getsharedpreferences(prefs_name, 0); loadprefs(); setbuttonconnect(); msendmessage.setenabled(false); mmessage.setenabled(false); msendmessage.setonclicklistener(new button.onclicklistener() { public void onclick(view v) { mconnection.sendtextmessage(mmessage.gettext().tostring()); } }); } @override protected void ondestroy() { super.ondestroy(); if (mconnection.isconnected()) { mconnection.disconnect(); } } @override public boolean oncreateoptionsmenu(menu menu) { menuinflater inflater = getmenuinflater(); inflater.inflate(r.menu.main_menu, menu); return true; } @override public boolean onoptionsitemselected(menuitem item) { switch (item.getitemid()) { case r.id.quit: finish(); break; default: return super.onoptionsitemselected(item); } return true; } }
and servlet tomcat code:
package servlets; import org.apache.catalina.websocket.messageinbound; import org.apache.catalina.websocket.streaminbound; import org.apache.catalina.websocket.websocketservlet; import org.apache.catalina.websocket.wsoutbound; import javax.servlet.http.httpservletrequest; import java.io.ioexception; import java.nio.bytebuffer; import java.nio.charbuffer; public class simplewebsocketservlet extends websocketservlet { private static final long serialversionuid = 1l; @override protected streaminbound createwebsocketinbound(string string, httpservletrequest hsr) { return new messageinbound() { @override protected void onbinarymessage(bytebuffer bb) throws ioexception { } @override protected void ontextmessage(charbuffer cb) throws ioexception { system.out.println(cb.tostring()); wsoutbound outbound = getwsoutbound(); outbound.writetextmessage(cb); } }; } }
i don't know what's wrong. have solution use android client in conjuntion server (java servlets on similar tecnology) through websockets? thanks
i think should have put code of connecting oncreate.
Comments
Post a Comment