Wednesday, January 12, 2011

Simple communication using java.net.Socket

If you try it target to new version of Android, you will face the error of NetworkOnMainThreadException, refer to the post android.os.NetworkOnMainThreadException.
updated@2013-08-28



java.net.Socket provides a client-side TCP socket. It's a simple exercise to implement Socket communication, on Android as a client.

Simple communication using java.net.Socket

In the next exercises, I will implement a local Socket Server in Eclipse. Such that you can try the linking between Android device/emulator and the local socket server.

The server runs in local, so I have to know my IP, refer to last article "How to check my ip in Linux" to check your own ip. It's 192.168.1.101 in my case. Modify the code with your own ip.

socket = new Socket(< Your ip >, 8888);

package com.exercise.AndroidClient;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class AndroidClient extends Activity {

EditText textOut;
TextView textIn;

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
  
     textOut = (EditText)findViewById(R.id.textout);
     Button buttonSend = (Button)findViewById(R.id.send);
     textIn = (TextView)findViewById(R.id.textin);
     buttonSend.setOnClickListener(buttonSendOnClickListener);
 }

 Button.OnClickListener buttonSendOnClickListener
 = new Button.OnClickListener(){

@Override
public void onClick(View arg0) {
 // TODO Auto-generated method stub
 Socket socket = null;
 DataOutputStream dataOutputStream = null;
 DataInputStream dataInputStream = null;

 try {
  socket = new Socket("192.168.1.101", 8888);
  dataOutputStream = new DataOutputStream(socket.getOutputStream());
  dataInputStream = new DataInputStream(socket.getInputStream());
  dataOutputStream.writeUTF(textOut.getText().toString());
  textIn.setText(dataInputStream.readUTF());
 } catch (UnknownHostException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 finally{
  if (socket != null){
   try {
    socket.close();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }

  if (dataOutputStream != null){
   try {
    dataOutputStream.close();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }

  if (dataInputStream != null){
   try {
    dataInputStream.close();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
 }
}};
}


main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 >
<TextView
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:text="@string/hello"
 />
<EditText
 android:id="@+id/textout"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 />
<Button
 android:id="@+id/send"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:text="Send"
 />
<TextView
 android:id="@+id/textin"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 />
</LinearLayout>


Also, you have to grand permission for the App to access internet, by adding the code in AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET"/>

download filesDownload the files.

Related:
- Android Server/Client example - server side using ServerSocket
- Android Server/Client example - client side using Socket

*** Updated example: Bi-directional communication between Client and Server, using ServerSocket, Socket, DataInputStream and DataOutputStream.

83 comments:

  1. Hi! Nice article.
    Ive been trying some different ways to get a page using Get and Post methods.
    Ive tryed classic sockets, java.net.URLConnection and http components from org.apache.http...
    Ive found that Apache Http Components and classic Sockets are very laggy and sometimes timeout when trying to connect to the remote web.
    And URLConnection from java.net performs better for this task, but not outstanding.
    After debugging a while i saw using Wireshark that almost 40% of packets sent are retransmissions and the 3way handshake of tcp doesn't or cant answer to SYN+ACK packets, only to SYN ones.
    Have you heard about a bug or experienced something like this?
    Have you a 1 or 2 sec lag in the connection stablishment in your tutorials?
    Thanks!

    ReplyDelete
  2. Hi, Can i run this application using 2 PCs iv got 2 PCs conneted in LAN so of i run the Android Application in an emulator in one PC and the java program in another PC will i get the output?

    ReplyDelete
  3. hello viplov,
    I have tried to run a PC host server and a Android client running in emulator, both in the same PC. and another Android client connect via Wifi, it can work.

    please refer Implement a simple Socket Server in Eclipse

    ReplyDelete
  4. ya iv too tried it iv got it thank you very much now i am trying it on an Android Device so now i am trying to modify the code so that i can use it for something like home automation purpose like phone to PC PC to a switching module and thank you once again

    ReplyDelete
  5. This comment has been removed by the author.

    ReplyDelete
  6. hi i am working on TCP communications using toggle buttons like i am using 2 buttons on click of one a message should go to the server so i have written a code but i am getting errors so shall i forward you the code can you help me in it?

    ReplyDelete
  7. Thank you so much, very nice article, it helped me a lot.

    ReplyDelete
  8. Thank you for your post.

    When i try to run this application on the android emulator in eclipse, it is forcing to close. I am not able to debug. What could the error be?
    Thank you.

    ReplyDelete
  9. hello myself,

    Have you grant permission for the App to access internet, by adding the code in AndroidManifest.xml

    <uses-permission android:name="android.permission.INTERNET"/>

    ReplyDelete
  10. This comment has been removed by the author.

    ReplyDelete
  11. Yes I have placed it. What I am trying is to run the local server (that you wrote in the next exercise) and this application on the same pc. I tried all possible combinations, (localhost, my ip address, etc..)
    (I am using eclipse classic 3.6.2, and my avd 5554). It is telling me fatal exception.
    Sorry I am totally new to android :s
    Thank you again.

    ReplyDelete
  12. Thank you so much it worked!
    The main.xml was outside the layout folder (i don't know how :s).
    Great article :)

    ReplyDelete
  13. Thanks a lot! This article helped me a lot! I have got a simple newbie question though, if i for example send g-sensor data to this textOut editText, how can i loop this client, to send this data to pc in real time? Please help :) Thanks again!

    ReplyDelete
  14. What a GREAT tutorial! I will be visiting your blog often!

    ReplyDelete
  15. Hi
    I am trying to use the same code but the Android client side always fails giving this exception:


    07-18 18:39:13.177: WARN/System.err(16826): java.net.SocketException: The operation timed out
    07-18 18:39:13.177: WARN/System.err(16826): at org.apache.harmony.luni.platform.OSNetworkSystem.connectStreamWithTimeoutSocketImpl(Native Method)
    07-18 18:39:13.177: WARN/System.err(16826): at org.apache.harmony.luni.platform.OSNetworkSystem.connect(OSNetworkSystem.java:115)
    07-18 18:39:13.177: WARN/System.err(16826): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:244)
    07-18 18:39:13.177: WARN/System.err(16826): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:219)
    07-18 18:39:13.177: WARN/System.err(16826): at java.net.Socket.startupSocket(Socket.java:781)
    07-18 18:39:13.177: WARN/System.err(16826): at java.net.Socket.tryAllAddresses(Socket.java:194)
    07-18 18:39:13.187: WARN/System.err(16826): at java.net.Socket.(Socket.java:258)
    07-18 18:39:13.187: WARN/System.err(16826): at java.net.Socket.(Socket.java:222)
    07-18 18:39:13.187: WARN/System.err(16826): at com.androidclient.AndroidClientNewActivity$1.onClick(AndroidClientNewActivity.java:47)
    07-18 18:39:13.187: WARN/System.err(16826): at android.view.View.performClick(View.java:2408)
    07-18 18:39:13.187: WARN/System.err(16826): at android.view.View$PerformClick.run(View.java:8817)
    07-18 18:39:13.197: WARN/System.err(16826): at android.os.Handler.handleCallback(Handler.java:587)
    07-18 18:39:13.197: WARN/System.err(16826): at android.os.Handler.dispatchMessage(Handler.java:92)
    07-18 18:39:13.197: WARN/System.err(16826): at android.os.Looper.loop(Looper.java:144)
    07-18 18:39:13.197: WARN/System.err(16826): at android.app.ActivityThread.main(ActivityThread.java:4937)
    07-18 18:39:13.197: WARN/System.err(16826): at java.lang.reflect.Method.invokeNative(Native Method)
    07-18 18:39:13.197: WARN/System.err(16826): at java.lang.reflect.Method.invoke(Method.java:521)
    07-18 18:39:13.197: WARN/System.err(16826): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    07-18 18:39:13.197: WARN/System.err(16826): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    07-18 18:39:13.197: WARN/System.err(16826): at dalvik.system.NativeStart.main(Native Method)

    any help?

    ReplyDelete
  16. Ok even its working for me! it only worked when i switched n made the Android as Server n PC as Client.

    ReplyDelete
  17. mio, how did you did you set that connection up? I am having trouble and i got the same timeoutexception that you did

    ReplyDelete
  18. hi sir, i'm a newbie in android Programming. what would be the cause if my emulator pops up a message "the Application testandroid(process com.test) has stopped unexpectedly. Please try again" i followed all the step you indicated in your post. tnx in advance...

    ReplyDelete
  19. Hi Toto, when you import the example try to select android 1.6 from the list called "Build Target" at form"New Android Project"
    good luck

    ReplyDelete
  20. This comment has been removed by the author.

    ReplyDelete
  21. sir I found this problem when I try to run the emulator and it tells this
    "the application___(process com.exercise.AndroidClient)has stopped unexpectedly. Please try again

    ReplyDelete
  22. Thank You, very very useful article.

    For my student project, I want to develop a client-server app that allows restaurant customers to order food using an android tablet.

    I've come to know that this is called 'socket programming',
    Is this method feasible for the project i want to undertake?

    I know i'm a total newbie in this, but i have time. I would like to know the right path to learn the skills necessary.

    ReplyDelete
  23. Thank you so much this was really helpful! Please I want to know how i can let the android emulator acting as a server send a message back to the client. Does port forwarding also have to do with this? i really appreciate ur help because i need both to exchange msgs via tcp

    ReplyDelete
  24. hello

    thanks for nice article on socket communication...

    i have a doubt about, how to receive data/message from other side

    ReplyDelete
  25. Hi,

    I'm new to Android and Java. I am having a problem with your socket client example. I am using 2.3.3.

    I get the error:

    The method onClick(View) of type new View.OnClickListener(){} must override a superclass
    method
    - implements android.view.View.OnClickListener.onClick

    Any ideas?

    ReplyDelete
  26. Hi, me program hangs when it gets to de line dataInputStream.readUTF(). If i comment this line it works good but i need to read incoming data. help... thanks.. (sorry my english)

    ReplyDelete
  27. hello dantulio,
    Can you try to catch the Exception to see what happen? (ex. using a Toast to display the Exception.toString()).

    ReplyDelete
  28. I seem to keep getting an R.id cannot be resolved as a result of these three line:

    textOut = (EditText)findViewById(R.id.textout);
    Button buttonSend = (Button)findViewById(R.id.send);
    textIn = (TextView)findViewById(R.id.textin);

    Anymore insight as to what R.id does so I might better know how to fix this.

    ReplyDelete
  29. hi all,
    can any one send me code for establishing a socket connection between two emulator.. or private channel between two emulator...
    please if not code also sugest me how to do.. its urgent..
    reply u mail to this
    manju.shirageri@gmail.com

    ReplyDelete
  30. Thanks for the tutorial. I am new to the android programming. I tried the source code and it works on the emulator and local PC, but when i deploy the apk into my android. It stuck at the screen and no response.. Anyone can help? Thanks

    ReplyDelete
  31. i was wondering if this works for 2.3.3 as well. and for all those who are really new , you need to edit your layout with ids textout and textin

    ReplyDelete
  32. @crazystaby i think you should check the android version on your phone..

    ReplyDelete
  33. hi everyone. i tried this code and the code for the server but when the android client runs, it crushes. any idea why? i tried many things but...

    ReplyDelete
  34. This comment has been removed by the author.

    ReplyDelete
  35. Thank you. Thank you. Thank you.

    really really informative and helpful.

    ReplyDelete
  36. thank you
    above code is very use full me

    ReplyDelete
  37. Hi,

    First of all, very nice blog about android development you made! I'm starting now and found many interesting things here...

    I tried to build this tcp client but android always crashes on the new socket line.

    I changed it to my desktop's IP, checked if I can ping it from my Android phone and I can. I also can ping the phone from the desktop. I added the uses permission on manifest.

    It crashes both on phone and the emulator.

    If you have any idea I would be very grateful. I tried many socket codes from internet but they all crash when creating the new socket, so I think it's something very basic I missed, but no idea of what could be...

    On emulator the stack is this:

    02-29 01:26:01.724: D/dalvikvm(537): Not late-enabling CheckJNI (already on)
    02-29 01:26:01.794: I/dalvikvm(537): Turning on JNI app bug workarounds for target SDK version 10...
    02-29 01:26:02.644: D/gralloc_goldfish(537): Emulator without GPU emulation detected.
    02-29 01:26:09.474: D/AndroidRuntime(537): Shutting down VM
    02-29 01:26:09.474: W/dalvikvm(537): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
    02-29 01:26:09.494: E/AndroidRuntime(537): FATAL EXCEPTION: main
    02-29 01:26:09.494: E/AndroidRuntime(537): android.os.NetworkOnMainThreadException
    02-29 01:26:09.494: E/AndroidRuntime(537): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
    02-29 01:26:09.494: E/AndroidRuntime(537): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
    02-29 01:26:09.494: E/AndroidRuntime(537): at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
    02-29 01:26:09.494: E/AndroidRuntime(537): at libcore.io.IoBridge.connect(IoBridge.java:112)
    02-29 01:26:09.494: E/AndroidRuntime(537): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
    02-29 01:26:09.494: E/AndroidRuntime(537): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    02-29 01:26:09.494: E/AndroidRuntime(537): at java.net.Socket.startupSocket(Socket.java:566)
    02-29 01:26:09.494: E/AndroidRuntime(537): at java.net.Socket.tryAllAddresses(Socket.java:127)
    02-29 01:26:09.494: E/AndroidRuntime(537): at java.net.Socket.(Socket.java:177)
    02-29 01:26:09.494: E/AndroidRuntime(537): at java.net.Socket.(Socket.java:149)
    02-29 01:26:09.494: E/AndroidRuntime(537): at com.exercise.AndroidClient.AndroidClient$1.onClick(AndroidClient.java:44)
    02-29 01:26:09.494: E/AndroidRuntime(537): at android.view.View.performClick(View.java:3511)
    02-29 01:26:09.494: E/AndroidRuntime(537): at android.view.View$PerformClick.run(View.java:14105)
    02-29 01:26:09.494: E/AndroidRuntime(537): at android.os.Handler.handleCallback(Handler.java:605)
    02-29 01:26:09.494: E/AndroidRuntime(537): at android.os.Handler.dispatchMessage(Handler.java:92)
    02-29 01:26:09.494: E/AndroidRuntime(537): at android.os.Looper.loop(Looper.java:137)
    02-29 01:26:09.494: E/AndroidRuntime(537): at android.app.ActivityThread.main(ActivityThread.java:4424)
    02-29 01:26:09.494: E/AndroidRuntime(537): at java.lang.reflect.Method.invokeNative(Native Method)
    02-29 01:26:09.494: E/AndroidRuntime(537): at java.lang.reflect.Method.invoke(Method.java:511)
    02-29 01:26:09.494: E/AndroidRuntime(537): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    02-29 01:26:09.494: E/AndroidRuntime(537): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    02-29 01:26:09.494: E/AndroidRuntime(537): at dalvik.system.NativeStart.main(Native Method)

    ReplyDelete
  38. This comment has been removed by the author.

    ReplyDelete
  39. i hope everyone is using the android version 1.6 . got the same crashing problem while developing with 2.3.3

    ReplyDelete
  40. Hum, I'm using 4.0.3, do things changed after 1.6?

    ReplyDelete
  41. Hy!

    NetWorkOnMainThread Exception ...

    I found out that Ice Cream Sandwich wants every network communication to be done in a seperate thread, so this tut doesn't really work any more

    ReplyDelete
  42. hello,
    i'm a newbie in android, I'm under linux 12.04, eclipse and i try to communicate with my Android 2.2 phone using your application , but i get this error message in the eclipse console:java.net.socket exception: Network unreachable

    ReplyDelete
  43. hello.....plzzz anyone can help make simple change in this project by making android as a server and desktop as a client!! Thanks.

    ReplyDelete
  44. hi, i have been trying to implement the same program and it does not work. the graphical interface works ok, but when i send the data the program stops working and the emulator goes to the main page in the android emulator.
    in order to make it run i had to make two changes:
    1. change "AndroidClient" to "AndroidClientActivity" in public class AndroidClient extends Activity
    2. i have to delete the "@Override" that is just over "public void onClick(View arg0) {"

    i have installed android sdk and eclipse according to http://developer.android.com/sdk/installing.html.
    finally, i am using the sdk=15 (which i have also changed in the manifest file).

    can anyone tell me what i am doing wrong?
    thanks, gus

    ReplyDelete
  45. Hi,
    I have to use the android:targetSdkVersion="14" in my AndroidManifest.xml. But when i use it the program does not work ? what can I do? Thanks

    ReplyDelete
  46. hello Ali Rezaeian,

    Is it error of NetworkOnMainThreadException? Please read it: android.os.NetworkOnMainThreadException

    ReplyDelete
  47. hi i try to send different type of data like writeBytes and crash when i send that data

    ReplyDelete
  48. This comment has been removed by the author.

    ReplyDelete
  49. Thank you for the code.
    But I have a doubt.
    I have written the client in 2.2 and made a java project for the server. When I run the client on the emulator and the server code it works well. But I want to run the client on my phone. The client opened in my phone, but when I try to send the data, it doesnt go ahead. I connected my phone and laptop with WiFi. And in the laptop's web browser I wrote the IP of my laptop : <8888>
    Am I doing this correctly? Please assist if I m wrong. And kindly tell why am I not able to send the data. My phone has version 2.3.6

    -Sejal

    ReplyDelete
  50. Hi......
    Thank you for this code...

    I have a similar problem. I want to send a data (String) from PC(Laptop) to the android device. How can I do this? Thank you very much for your help.

    - Amil

    ReplyDelete
  51. Hi,
    I tried to run this application but when i click the send button on my emulator it just crashes and i get an error on the second @override below this line of code
    Button.OnClickListener buttonSendOnClickListener
    = new Button.OnClickListener(){
    i would appriciate the help i have a project to do before my school starts thnx...

    ReplyDelete
  52. HI sir...i want to connect android client with tcp server in localhost to get a data....give some tutorial for that...
    thank you...

    ReplyDelete
  53. i tried ur tutorial...but it shows some errors...plz clear that...
    "Create field Textout in type id"
    this is the error.
    Thank u..

    ReplyDelete
  54. Hi..I Tried ur tutorial...but it shows some error...
    "create field textout in type id:
    This was the error...plz help to this ....
    Thank u...

    ReplyDelete
  55. Hi..I Tried ur tutorial...but it shows some error...
    "create field textout in type id:
    This was the error...plz help to this ....
    Thank u...

    ReplyDelete
  56. @Monisha M: If you don't mind I would like to try to answer your question. have you added the EditText named textOut in the xml? check it in R.java if its declared in the id part.. cz your error suggests something like this..

    ReplyDelete
  57. I made it possible! thanks for this post. Here is what ive done!

    http://thedoraproject.blogspot.com/2012/12/data-connection-between-android-and-pc.html

    ReplyDelete
  58. Hi,
    It is working fine for me when I followed the procedure that you mentioned in your article.

    But When I try the reverse process where I created a ServerSocket in android and a socket in Java, the ServerSockets reads the data only once. After that I see the exception in Java console as "java.net.SocketException: Connection reset by peer: socket write error"
    Could you please tell what the problem could be ??

    Thanks!
    Siva

    ReplyDelete
  59. I'm facing a problem, when i press send the app force closes! any suggestions?

    ReplyDelete
  60. nice tutorial,but how i can connect java server and android client via sms instead of sockets.

    ReplyDelete
  61. hey ! nice article
    i have tried this one
    i jsut got an IOException when trying to create a client socket...
    what should i do.....?

    thanx in advance

    ReplyDelete
  62. Okay I have been trying to run this program on an Android device.. but every time I have tried to send the message, it force closes. Do you have any suggestions?

    ReplyDelete
  63. Hello there ,
    thanks for this post , but i have a problem , how can I make 2 android devices talk with each other via texting , not from pc-android , I want android-android example , I hope you could help me with this issue

    Regards ,

    ReplyDelete
  64. I have tryed the code but, i did not get anyting in the server vice versa.

    after change it

    //dataOutputStream.writeUTF(textOut.getText().toString());
    dataOutputStream.writeBytes(textOut.getText().toString());

    //textIn.setText(dataInputStream.readUTF());
    textIn.setText(dataInputStream.readByte());

    i got the string at server side. but i still did not got anything at client side

    Any idea?

    ReplyDelete
  65. Hi, I have a question. What IP should I use if I want to run this application from a real android phone, and not from the emulator. My computer is directly connected to internet, it's not connected through a wifi router. My phone is connecting through an wifi connection shared by my computer (I'm using connectify software to do this). So what IP should I use to make it work. I've tried some of them, but the application doesen't do anything, it eneters in a non responding state.
    Please help me with this, I've seen that you tried this and worked for you.

    ReplyDelete
  66. I think you have to set port forwarding. But I don't know you config.

    ReplyDelete
  67. Hello,

    I would like to ask your help.
    I tryed your client code and after connecting it did not get datas.
    What is the problem. It it is possible can you give me the good codes. My mail address is schubertjw@gmail.com.
    Than you....

    ReplyDelete
  68. Really interesting article .thanks a lot

    ReplyDelete
  69. hi thanks for the tutorial. now i understand about the socket and the server concept in java.

    I want to develop an app that will be deployed in two android devices for making them communicate through wifi. And here is the case:

    Two devices are turning on their Wifi
    They're not connected to any network. No LAN, no bluetooth, no phonecall, no internet
    They want to discover each other devices
    They want to communicate each other (sending simple string).
    They don't want the intermediary devices for direct communication.
    They are not having Wifi Direct capabilities.

    is it possible? How to do that?

    I read socket and server concept in java, but they need to be connected each other / to any networks. Which means it is not what in my case (above). I need to know how each device could discover each other first before connecting them. And how to do that in Wifi?

    I found Chord SDK. that simplify the wifi coding in android. But that only available for Samsung device. Sigh.

    I found JXTA for peer2peer communication on java. But it need RDV to list down the IP address for the peer to acknowledge each other. Which means not fit to my case (above).

    I found alljoyn library. But the examples are too complex to follow.

    I found NearBytes SDK. it simple code that makes the devices communicate each other. I like it. But it only available for shorter distance (few centimeters). Which is not fit to my case (above).

    CMIIW.

    ReplyDelete
  70. Hi,am creating android barcode reader over wifi to pc ..
    i can send the barcode data to pc with the help of this socket programming ....
    BUT it only print in the eclipse teminal ...I want to print it in the text field in php file....

    pls help me...

    ReplyDelete
  71. Hi,
    it is really nice tutorial,
    the problem is that i tried to run server it was ok.. it is working fine but when i try to pass the value from android emulator it is giving me error networkOnMainThread exception and application crashes.
    i also tried it inside thread to avoid networkonmainthread. the program do not crashes but server do no get any response...

    ReplyDelete
  72. hi, i just try your code.
    and i can connect to socket and send string with emulator.
    but, when i run this code in real device i cant connect or send string to socket.
    the application force quit and my device is hang.
    pliss help my problem...,
    what's wrong with this code or my real device.
    FYI i try this code in emulator with JelyBean 2.1 and succses.
    but i try this code in Real Device with JellyBean 2.1 to, i can run the aplication, but when i try to connect or send string the aplication is not responding, and the device is hang.

    thanks.

    ReplyDelete
  73. please help asap
    working well on wifi but wwhen i turn on phone internet (gprs or 3g) app stops working :/ can u explain what i should do

    ReplyDelete
  74. hello waleed,

    It should be the port service blocked by your service provider.

    I have no idea to solve this problem, sorry.

    ReplyDelete
  75. For those of you wondering about getting the client work on your phone and the server to work on your computer, here's a possible solution if your server machine is on a wifi network. What I ended up doing was enabling port forwarding on my wireless router. As Android-Er said, this is different for every router, so you'll have to figure out how it's done on yours. But basically in your router's port forwarding settings you enter the ip address of your server computer and the port the server is listening on, and then enable port forwarding for that ip address and port. And naturally, the same principle applies to a wired router, too. But you'll need to figure out how to get into the admin settings on your router, and then where the port forwarding feature is within those settings.

    ReplyDelete
  76. How do you do, so that if the client receives a message it will trigger somthing or call a method and give the message as parameter, or anything, that can let you know there are some data to be read ?

    ReplyDelete
  77. hi,
    there is anyone can help me how make program for connecting smartphone to other device using wifi in android studio software..

    ReplyDelete
  78. You can fix the network policy error by adding two lines below to give the permission

    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);

    ReplyDelete
  79. Thank You for post. I got apk succfully but I dont have knowledge of how to see the typed output in pc. Can any one help me.

    ReplyDelete
  80. Hi,

    Instead of using ports, I would like to use URL instead. Not sure if this idea is even feasible and I'm new to all these.

    Any advice would be appreciated!

    BTW awesome blog post! Lifesaver!

    ReplyDelete