java - Client socket on android -
i'm trying send single string android pc , after bit of research on site , others i've found out sockets , how use them. have written server program can receive strings sent it. below code.
//static serversocket variable private static serversocket server; //socket server port on listen private static int port = 9021; public static void main(string [] args) throws ioexception, classnotfoundexception{ server = new serversocket(port); while(true){ system.out.println("waiting client request." + inetaddress.getlocalhost()); socket socket = server.accept(); objectinputstream ois = new objectinputstream(socket.getinputstream()); string message = (string)ois.readobject(); system.out.println("message received: " + message); objectoutputstream oos = new objectoutputstream(socket.getoutputstream()); oos.writeobject("hi client: " + message); ois.close(); oos.close(); socket.close(); if(message.equalsignorecase("exit")){ break; } } system.out.println("shutting down serve"); server.close(); }
i have tested using pc client program sends string , have confirmed server script works. trying implement same concept in android facing lot of trouble due fact tutorials online task outdated (2-3 years) nothing works expected. can tell me how write simple android app in single string sent on socket?
from can see in logcat, outdated tutorials on internet not working because android has apparently introduced in recent versions aggressive process manager monitors behaviour of threads , if there repeated thread actions, shuts down without notice.
edit: per solution have implemented asynctask. server not receiving , says address in use. think because of socket address in android code. please help!
public class mainactivity extends activity { private button button; private edittext message; private textview finalresult; //inetaddress host; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); message = (edittext) findviewbyid(r.id.et_time); button = (button) findviewbyid(r.id.btn_do_it); finalresult = (textview) findviewbyid(r.id.tv_result); /* try { host = inetaddress.getlocalhost(); } catch (unknownhostexception e) { // todo auto-generated catch block e.printstacktrace(); }*/ button.setonclicklistener(new view.onclicklistener() { @override public void onclick(view arg0) { asynctaskrunner runner = new asynctaskrunner(); string msg = message.gettext().tostring(); runner.execute(msg); } }); } private class asynctaskrunner extends asynctask<string, string, string> { socket socket = null; objectoutputstream oos = null; objectinputstream ois = null; int clientport = 8080; string resp; @override protected string doinbackground(string... params) { publishprogress("sending..."); string msg = params[0]; for(int i=0;i<=5;i++){ //establish socket connection server try { socket = new socket( "100.69.73.16",clientport); //write socket using objectouputstream oos = new objectoutputstream(socket.getoutputstream()); oos.writeobject(msg+i); oos.close(); socket.close(); thread.sleep(100); } catch (unknownhostexception e) { e.printstacktrace(); } catch (ioexception e) { // todo auto-generated catch block e.printstacktrace(); } catch (interruptedexception e) { // todo auto-generated catch block e.printstacktrace(); } } resp = "message has been sent"; return resp; } @override protected void onpostexecute(string result) { finalresult.settext(result); } @override protected void onpreexecute() { } @override protected void onprogressupdate(string... values) { finalresult.settext(values[0]); } } }
ok solved problem of 'address used' changing port number. apparently port number being used other programs on laptop. in retrospect checking on how this, can use above code , remember change port number in both codes similar. in android code socket opened, can put in local ip address (very important, google gives external) computer.
Comments
Post a Comment