sockets - Java Client/Server Programming -- BufferedReader for Reading Data from Android Device will not Function on Client Side, but will on Server Side -


i writing example java server/android client pair of programs in order learn how use sockets on android. simple set of programs; client sends string of text server, , server echoes client. server using straight-run java, , client android smartphone using jelly bean version of system. although can android device function server, have had difficult time getting work client.

my server code follows:

import java.io.bufferedreader; import java.io.datainputstream; import java.io.ioexception; import java.io.inputstreamreader; import java.io.printstream; import java.net.serversocket; import java.net.socket;  public class tcpipserver3 {     public static void main(string argv[]) throws exception      {          // declaration section:         // declare server socket , client socket server         // declare input , output stream         serversocket echoserver = null;         string line;         datainputstream is;         bufferedreader br;         printstream os;         socket clientsocket = null;          // try open server socket on port 9999         // note can't choose port less 1023 if not         // privileged users (root)         try {             echoserver = new serversocket(9999);         }         catch (ioexception e) {             system.out.println(e);         }          // create socket object serversocket listen , accept         // connections.         // open input , output streams         try {             clientsocket = echoserver.accept();             = new datainputstream(clientsocket.getinputstream());             br = new bufferedreader(new inputstreamreader(is));             os = new printstream(clientsocket.getoutputstream());             // long receive data, echo data client.             while (true)             {                 line = br.readline();                 system.out.println(line);                 os.println(line);                 os.flush();             }         }         catch (ioexception e) {             system.out.println(e);         }     } } 

my client code follows:

package com.example.androidtcpclient3;  import java.io.bufferedreader; import java.io.bufferedwriter; import java.io.datainputstream; import java.io.ioexception; import java.io.inputstreamreader; import java.io.outputstreamwriter; import java.io.printwriter; import java.net.inetaddress; import java.net.socket; import java.net.unknownhostexception;  import android.os.bundle; import android.app.activity; import android.content.context; import android.util.log; import android.view.view; import android.view.view.onclicklistener; import android.widget.button; import android.widget.edittext; import android.widget.textview; import android.widget.toast;  public class clientactivity extends activity {         private button bt;        private textview tv;        private socket socket;        private string serveripaddress = "10.0.2.2";        //private string serveripaddress = "10.1.200.100";        private static final int redirected_serverport = 9999;         @override        public void oncreate(bundle savedinstancestate) {           super.oncreate(savedinstancestate);           setcontentview(r.layout.client);           bt = (button) findviewbyid(r.id.mybutton);           tv = (textview) findviewbyid(r.id.mytextview);           thread cthread = new thread(new clientthread());           cthread.start();        }         public class clientthread implements runnable {            public void run() {               try {                      inetaddress serveraddr = inetaddress.getbyname(serveripaddress);                      socket = new socket(serveraddr, redirected_serverport);                   } catch (unknownhostexception e1) {                      e1.printstacktrace();                   } catch (ioexception e1) {                      e1.printstacktrace();                   }               bt.setonclicklistener(new onclicklistener() {                   public void onclick(view v) {                      try {                         string line;                          datainputstream is;                         bufferedreader br;                         printwriter out;                                   edittext et = (edittext) findviewbyid(r.id.edittext01);                         string str = et.gettext().tostring();                         out = new printwriter(new bufferedwriter(new outputstreamwriter(socket.getoutputstream())),true);                         out.println(str);                         log.d("client", "client sent message");                          = new datainputstream(socket.getinputstream());                         br = new bufferedreader(new inputstreamreader(is));                         line = br.readline();                                                tv.settext(line);                      } catch (unknownhostexception e) {                         tv.settext("error1");                         e.printstacktrace();                      } catch (ioexception e) {                         tv.settext("error2");                         e.printstacktrace();                      } catch (exception e) {                         tv.settext("error3");                         e.printstacktrace();                      }                   }                });            }        } } 

i cannot program execute past statement "line = br.readline();" on android client. reason, statement throws exception every time reached in code. in client program's execution, results in string "error3" being written client's textview widget. however, have been able confirm server can read data client successfully. readline() method seems showing asymmetrical behavior between clients , servers.

any in resolving issue appreciated.

update: stack trace follows:

07-18 13:56:36.802: w/system.err(2164): android.os.networkonmainthreadexception 07-18 13:56:36.832: w/system.err(2164):     @ android.os.strictmode$androidblockguardpolicy.onnetwork(strictmode.java:1117) 07-18 13:56:36.842: w/system.err(2164):     @ libcore.io.blockguardos.recvfrom(blockguardos.java:163) 07-18 13:56:36.842: w/system.err(2164):     @ libcore.io.iobridge.recvfrom(iobridge.java:513) 07-18 13:56:36.852: w/system.err(2164):     @ java.net.plainsocketimpl.read(plainsocketimpl.java:488) 07-18 13:56:36.862: w/system.err(2164):     @ java.net.plainsocketimpl.access$000(plainsocketimpl.java:46) 07-18 13:56:36.872: w/system.err(2164):     @ java.net.plainsocketimpl$plainsocketinputstream.read(plainsocketimpl.java:240) 07-18 13:56:36.882: w/system.err(2164):     @ java.io.datainputstream.read(datainputstream.java:84) 07-18 13:56:36.882: w/system.err(2164):     @ java.io.inputstreamreader.read(inputstreamreader.java:244) 07-18 13:56:36.894: w/system.err(2164):     @ java.io.bufferedreader.fillbuf(bufferedreader.java:130) 07-18 13:56:36.902: w/system.err(2164):     @ java.io.bufferedreader.readline(bufferedreader.java:354) 07-18 13:56:36.902: w/system.err(2164):     @ com.example.androidtcpclient3.clientactivity$clientthread$1.onclick(clientactivity.java:75) 07-18 13:56:36.912: w/system.err(2164):     @ android.view.view.performclick(view.java:4204) 07-18 13:56:36.922: w/system.err(2164):     @ android.view.view$performclick.run(view.java:17355) 07-18 13:56:36.932: w/system.err(2164):     @ android.os.handler.handlecallback(handler.java:725) 07-18 13:56:36.932: w/system.err(2164):     @ android.os.handler.dispatchmessage(handler.java:92) 07-18 13:56:36.942: w/system.err(2164):     @ android.os.looper.loop(looper.java:137) 07-18 13:56:36.952: w/system.err(2164):     @ android.app.activitythread.main(activitythread.java:5041) 07-18 13:56:36.952: w/system.err(2164):     @ java.lang.reflect.method.invokenative(native method) 07-18 13:56:36.962: w/system.err(2164):     @ java.lang.reflect.method.invoke(method.java:511) 07-18 13:56:36.972: w/system.err(2164):     @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:793) 07-18 13:56:36.972: w/system.err(2164):     @ com.android.internal.os.zygoteinit.main(zygoteinit.java:560) 07-18 13:56:36.983: w/system.err(2164):     @ dalvik.system.nativestart.main(native method) 


Comments

Popular posts from this blog

php - Calling a template part from a post -

Firefox SVG shape not printing when it has stroke -

How to mention the localhost in android -