java - Client Not Receiving String From Server -
i trying write tcp client using sockets in java, cannot seem read data sent server client. time received server not time..
public class tcpclient { private string servermessage; public static final string serverip = "103.13.97.87"; //your computer ip address public static final int serverport = 8101; private onmessagereceived mmessagelistener = null; private boolean mrun = false; printwriter out; bufferedreader in; /** * constructor of class. onmessagedreceived listens messages received server */ public tcpclient(onmessagereceived listener) { mmessagelistener = listener; } /** * sends message entered client server * @param message text entered client */ public void sendmessage(string message){ if (out != null && !out.checkerror()) { out.println(message); out.flush(); } } public void stopclient(){ mrun = false; } public void run() { mrun = true; try { //here must put computer's ip address. inetaddress serveraddr = inetaddress.getbyname(serverip); log.e("tcp client", "c: connecting..."); //create socket make connection server socket socket = new socket(serveraddr, serverport); try { //send message server out = new printwriter(new bufferedwriter(new outputstreamwriter(socket.getoutputstream())), true); log.e("tcp client", "c: sent."); log.e("tcp client", "c: done."); //receive message server sends in = new bufferedreader(new inputstreamreader(socket.getinputstream())); //in while client listens messages sent server while (mrun) { servermessage = in.readline(); if (servermessage != null && mmessagelistener != null) { //call method messagereceived myactivity class mmessagelistener.messagereceived(servermessage); } servermessage = null; } log.e("response server", "s: received message: '" + servermessage + "'"); } catch (exception e) { log.e("tcp", "s: error", e); } { //the socket must closed. not possible reconnect socket // after closed, means new socket instance has created. socket.close(); } } catch (exception e) { log.e("tcp", "c: error", e); } } //declare interface. method messagereceived(string message) must implemented in myactivity //class @ on asyncktask doinbackground public interface onmessagereceived { public void messagereceived(string message); } }
my customadpter.java
public class mycustomadapter extends baseadapter { private arraylist<string> mlistitems; private layoutinflater mlayoutinflater; public mycustomadapter(context context, arraylist<string> arraylist){ mlistitems = arraylist; //get layout inflater mlayoutinflater = (layoutinflater) context.getsystemservice(context.layout_inflater_service); } @override public int getcount() { //getcount() represents how many items in list return mlistitems.size(); } @override //get data of item specific position //i represents position of item in list public object getitem(int i) { return null; } @override //get position id of item list public long getitemid(int i) { return 0; } @override public view getview(int position, view view, viewgroup viewgroup) { //check see if reused view null or not, if not null reuse if (view == null) { view = mlayoutinflater.inflate(r.layout.list_item, null); } //get string item position "position" array list put on textview string stringitem = mlistitems.get(position); if (stringitem != null) { textview itemname = (textview) view.findviewbyid(r.id.list_item_text_view); if (itemname != null) { //set item name on textview itemname.settext(stringitem); } } //this method must return view corresponding data @ specified position. return view; } }
mainactivity.java
public class mainactivity extends activity { private listview mlist; private arraylist<string> arraylist; private mycustomadapter madapter; private tcpclient mtcpclient; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); arraylist = new arraylist<string>(); final edittext edittext = (edittext) findviewbyid(r.id.edittext); button send = (button)findviewbyid(r.id.send_button); //relate listview java 1 created in xml mlist = (listview)findviewbyid(r.id.list); madapter = new mycustomadapter(this, arraylist); mlist.setadapter(madapter); // connect server new connecttask().execute(""); send.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { //string message = edittext.gettext().tostring(); string message = "mall: abc mall date: 08/08/2013 time: 13:45 md5 f6151b2cdc256be4971bcc30629bbc7\r\n"; /* string str =md5digest(message); string s=message+str;*/ //add text in arraylist arraylist.add("c: " + message); //sends message server if (mtcpclient != null) { mtcpclient.sendmessage(message); /*mtcpclient.sendmessage(s);*/ } //refresh list madapter.notifydatasetchanged(); edittext.settext(""); } }); } public class connecttask extends asynctask<string,string,tcpclient> { @override protected tcpclient doinbackground(string... message) { //we create tcpclient object , mtcpclient = new tcpclient(new tcpclient.onmessagereceived() { @override //here messagereceived method implemented public void messagereceived(string message) { //this method calls onprogressupdate publishprogress(message); } }); mtcpclient.run(); return null; } @override protected void onprogressupdate(string... values) { super.onprogressupdate(values); //in arraylist add messaged received server arraylist.add(values[0]); // notify adapter data set has changed. means new message received // server added list madapter.notifydatasetchanged(); } } public static final string md5digest(final string text) { try { // create md5 hash messagedigest digest = java.security.messagedigest.getinstance("md5"); digest.update(text.getbytes()); byte messagedigest[] = digest.digest(); // create hex string stringbuffer hexstring = new stringbuffer(); int messagedigestlenght = messagedigest.length; (int = 0; < messagedigestlenght; i++) { string hasheddata = integer.tohexstring(0xff & messagedigest[i]); while (hasheddata.length() < 2) hasheddata = "0" + hasheddata; hexstring.append(hasheddata); } return hexstring.tostring(); } catch (nosuchalgorithmexception e) { e.printstacktrace(); } return ""; // if text null return nothing } @override public boolean oncreateoptionsmenu(menu menu) { // inflate menu; adds items action bar if present. getmenuinflater().inflate(r.menu.main, menu); return true; } }
Comments
Post a Comment