Multithreading using sockets









up vote
0
down vote

favorite












I'm developing an App that is meant to receive weight measures from industrial scales, one, two or more scales. The weight of each scale is sent through a RS232 interface continuously (I receive every 100 milliseconds the weight from the scale, this means that idle time is low. Once I start receiving the weight from the scale it doesn't stop) using a WiFi Serial adapter. I'm using a TCP Connection Socket and it works fine if I try to get the weight one scale at a time. What I try to achieve is this: I want to listen to two or four scales at the same time and update the UI in real time as I get the weight from the scale. (If I read the weight one scale at the time it works fine). I tried multithreading, ThreadPoolExecutor, ThreadHandlers, etc but I got several errors (pretty sure I didn't implement them correctly I'm new to multithreading). This is the code at the moment:



The Connection Class receives the weight from the scales. I communicate the weight received through an interface to the other classes



public class Connection implements Runnable 
public static final String LOG_TAG = Connection.class.getSimpleName();
public interface ConnectionDefinition
public ConnectionReader createReader(int timeout) throws IOException;

public String getNameOrAddress();


public interface Listener
public void onException(Exception e);

public void postWeight(double weight, boolean steady);


private ConnectionReader m_Reader;
private Listener m_Listener = s_NullListener;
private final ConnectionDefinition m_ConnectionDefinition;

private volatile boolean m_Continue = false;

private static final int s_Timeout = 5000;

public Connection(final ConnectionDefinition connectionDef)
m_ConnectionDefinition = connectionDef;
start();


@Override
public void run()
m_Continue = true;
while (m_Continue)
try
m_Reader = m_ConnectionDefinition.createReader(s_Timeout);
final Result result = new Result();

while (m_Continue)
m_Reader.read(result);

final double weight = result.weight;
final boolean steady = result.steady;

Log.e(LOG_TAG, "Connection!!! " + String.valueOf(weight));

m_Listener.postWeight(weight, steady);

catch (final IOException e)
handleException(e);
finally
if (m_Reader != null)
try
m_Reader.close();
catch (final IOException ignored)
// ignored

m_Reader = null;




private void handleException(final Exception e)
if (m_Continue)
m_Listener.onException(e);
try
Thread.sleep(s_Timeout);
catch (final InterruptedException e1)




public void start()
if (running())
throw new IllegalStateException("Connection already running");

final String name = m_ConnectionDefinition.getNameOrAddress();
//Log.e(LOG_TAG, "Estoy en START! ");
new Thread(this, "Scale Connection: " + name).start();


public void stop()
m_Continue = false;
if (m_Reader != null)
try
m_Reader.stop();
catch (final IOException e)


//Log.e(LOG_TAG, "Estoy en STOP! ");


public boolean running()
return m_Continue;


public void setListener(final Listener listener)
if (listener != null)
m_Listener = listener;
else
m_Listener = s_NullListener;


public void removeListener()
m_Listener = s_NullListener;


public ConnectionDefinition connectionDefinition()
return m_ConnectionDefinition;


private static Listener s_NullListener = new Listener()
@Override
public void onException(final Exception e)


@Override
public void postWeight(final double weight, final boolean steady)

;




I created a method, where I try to listen to the different weight measures and Update the UI (this method works with one listener at the time. It updates the UI correctly):



 private void connectionListener()

/*I GET THE CONNECTIONS DEFINED*/

final List<ConnectionDefinition> connectionDefinition = Persistor.getInstance().connectionDefinitions();
final ConnectionDefinition conDef = connectionDefinition.get(0);

/*MY APPROACH IS TO CREATE RUNNABLES TO PUT THE TO WORK IN DIFFERENT THREATS. UNTIL NOW IT DIDNT WORK*/

runnable1 = (new Runnable()
final Connection connection1 = new Connection(conDef);
@Override
public void run()
if(!connection1.running()) connection1.start();
connection1.setListener(new Connection.Listener()
@Override
public void postWeight(final double weight, final boolean steady)
mHandler1.post(new Runnable()
public void run()
if(!Double.isNaN(weight))
Log.e(LOG_TAG, "Runnable 1 !!!");
inputPesoRuedaDelanteraIzquierda.setText(String.valueOf(weight));
//connection1.stop();


);

@Override
public void onException(final Exception e)
e.printStackTrace();
//showMessage("Reintentando en 5 segs...");

);
/*
try
Thread.sleep(300);
catch (InterruptedException e)
e.printStackTrace();
*/

);

runnable2 = (new Runnable()
final Connection connection2 = new Connection(conDef);
@Override
public void run()
if(!connection2.running()) connection2.start();
connection2.setListener(new Connection.Listener()
@Override
public void postWeight(final double weight, final boolean steady)
mHandler1.post(new Runnable()
public void run()
if(!Double.isNaN(weight))
Log.e(LOG_TAG, "Runnable 2 !!!");
inputPesoRuedaDelanteraDerecha.setText(String.valueOf(weight));
//connection2.stop();


);


@Override
public void onException(final Exception e)
e.printStackTrace();
//showMessage("Reintentando en 5 segs...");

);
/*
try
Thread.sleep(300);
catch (InterruptedException e)
e.printStackTrace();
*/

);

worker = new WorkerThreadPool();
worker.execute(runnable1);
worker.execute(runnable2);

/*
Executor executor = new ThreadPerTaskExecutor();
executor.execute(runnable1);
executor.execute(runnable2);
*/
//new Thread(runnable1).start();
//new Thread(runnable2).start();





As you can see I tried different approaches. I need help to implement the correct one I'm open to other ideas (Maybe listener iterators, even though I like the idea of multithreading)










share|improve this question



























    up vote
    0
    down vote

    favorite












    I'm developing an App that is meant to receive weight measures from industrial scales, one, two or more scales. The weight of each scale is sent through a RS232 interface continuously (I receive every 100 milliseconds the weight from the scale, this means that idle time is low. Once I start receiving the weight from the scale it doesn't stop) using a WiFi Serial adapter. I'm using a TCP Connection Socket and it works fine if I try to get the weight one scale at a time. What I try to achieve is this: I want to listen to two or four scales at the same time and update the UI in real time as I get the weight from the scale. (If I read the weight one scale at the time it works fine). I tried multithreading, ThreadPoolExecutor, ThreadHandlers, etc but I got several errors (pretty sure I didn't implement them correctly I'm new to multithreading). This is the code at the moment:



    The Connection Class receives the weight from the scales. I communicate the weight received through an interface to the other classes



    public class Connection implements Runnable 
    public static final String LOG_TAG = Connection.class.getSimpleName();
    public interface ConnectionDefinition
    public ConnectionReader createReader(int timeout) throws IOException;

    public String getNameOrAddress();


    public interface Listener
    public void onException(Exception e);

    public void postWeight(double weight, boolean steady);


    private ConnectionReader m_Reader;
    private Listener m_Listener = s_NullListener;
    private final ConnectionDefinition m_ConnectionDefinition;

    private volatile boolean m_Continue = false;

    private static final int s_Timeout = 5000;

    public Connection(final ConnectionDefinition connectionDef)
    m_ConnectionDefinition = connectionDef;
    start();


    @Override
    public void run()
    m_Continue = true;
    while (m_Continue)
    try
    m_Reader = m_ConnectionDefinition.createReader(s_Timeout);
    final Result result = new Result();

    while (m_Continue)
    m_Reader.read(result);

    final double weight = result.weight;
    final boolean steady = result.steady;

    Log.e(LOG_TAG, "Connection!!! " + String.valueOf(weight));

    m_Listener.postWeight(weight, steady);

    catch (final IOException e)
    handleException(e);
    finally
    if (m_Reader != null)
    try
    m_Reader.close();
    catch (final IOException ignored)
    // ignored

    m_Reader = null;




    private void handleException(final Exception e)
    if (m_Continue)
    m_Listener.onException(e);
    try
    Thread.sleep(s_Timeout);
    catch (final InterruptedException e1)




    public void start()
    if (running())
    throw new IllegalStateException("Connection already running");

    final String name = m_ConnectionDefinition.getNameOrAddress();
    //Log.e(LOG_TAG, "Estoy en START! ");
    new Thread(this, "Scale Connection: " + name).start();


    public void stop()
    m_Continue = false;
    if (m_Reader != null)
    try
    m_Reader.stop();
    catch (final IOException e)


    //Log.e(LOG_TAG, "Estoy en STOP! ");


    public boolean running()
    return m_Continue;


    public void setListener(final Listener listener)
    if (listener != null)
    m_Listener = listener;
    else
    m_Listener = s_NullListener;


    public void removeListener()
    m_Listener = s_NullListener;


    public ConnectionDefinition connectionDefinition()
    return m_ConnectionDefinition;


    private static Listener s_NullListener = new Listener()
    @Override
    public void onException(final Exception e)


    @Override
    public void postWeight(final double weight, final boolean steady)

    ;




    I created a method, where I try to listen to the different weight measures and Update the UI (this method works with one listener at the time. It updates the UI correctly):



     private void connectionListener()

    /*I GET THE CONNECTIONS DEFINED*/

    final List<ConnectionDefinition> connectionDefinition = Persistor.getInstance().connectionDefinitions();
    final ConnectionDefinition conDef = connectionDefinition.get(0);

    /*MY APPROACH IS TO CREATE RUNNABLES TO PUT THE TO WORK IN DIFFERENT THREATS. UNTIL NOW IT DIDNT WORK*/

    runnable1 = (new Runnable()
    final Connection connection1 = new Connection(conDef);
    @Override
    public void run()
    if(!connection1.running()) connection1.start();
    connection1.setListener(new Connection.Listener()
    @Override
    public void postWeight(final double weight, final boolean steady)
    mHandler1.post(new Runnable()
    public void run()
    if(!Double.isNaN(weight))
    Log.e(LOG_TAG, "Runnable 1 !!!");
    inputPesoRuedaDelanteraIzquierda.setText(String.valueOf(weight));
    //connection1.stop();


    );

    @Override
    public void onException(final Exception e)
    e.printStackTrace();
    //showMessage("Reintentando en 5 segs...");

    );
    /*
    try
    Thread.sleep(300);
    catch (InterruptedException e)
    e.printStackTrace();
    */

    );

    runnable2 = (new Runnable()
    final Connection connection2 = new Connection(conDef);
    @Override
    public void run()
    if(!connection2.running()) connection2.start();
    connection2.setListener(new Connection.Listener()
    @Override
    public void postWeight(final double weight, final boolean steady)
    mHandler1.post(new Runnable()
    public void run()
    if(!Double.isNaN(weight))
    Log.e(LOG_TAG, "Runnable 2 !!!");
    inputPesoRuedaDelanteraDerecha.setText(String.valueOf(weight));
    //connection2.stop();


    );


    @Override
    public void onException(final Exception e)
    e.printStackTrace();
    //showMessage("Reintentando en 5 segs...");

    );
    /*
    try
    Thread.sleep(300);
    catch (InterruptedException e)
    e.printStackTrace();
    */

    );

    worker = new WorkerThreadPool();
    worker.execute(runnable1);
    worker.execute(runnable2);

    /*
    Executor executor = new ThreadPerTaskExecutor();
    executor.execute(runnable1);
    executor.execute(runnable2);
    */
    //new Thread(runnable1).start();
    //new Thread(runnable2).start();





    As you can see I tried different approaches. I need help to implement the correct one I'm open to other ideas (Maybe listener iterators, even though I like the idea of multithreading)










    share|improve this question

























      up vote
      0
      down vote

      favorite









      up vote
      0
      down vote

      favorite











      I'm developing an App that is meant to receive weight measures from industrial scales, one, two or more scales. The weight of each scale is sent through a RS232 interface continuously (I receive every 100 milliseconds the weight from the scale, this means that idle time is low. Once I start receiving the weight from the scale it doesn't stop) using a WiFi Serial adapter. I'm using a TCP Connection Socket and it works fine if I try to get the weight one scale at a time. What I try to achieve is this: I want to listen to two or four scales at the same time and update the UI in real time as I get the weight from the scale. (If I read the weight one scale at the time it works fine). I tried multithreading, ThreadPoolExecutor, ThreadHandlers, etc but I got several errors (pretty sure I didn't implement them correctly I'm new to multithreading). This is the code at the moment:



      The Connection Class receives the weight from the scales. I communicate the weight received through an interface to the other classes



      public class Connection implements Runnable 
      public static final String LOG_TAG = Connection.class.getSimpleName();
      public interface ConnectionDefinition
      public ConnectionReader createReader(int timeout) throws IOException;

      public String getNameOrAddress();


      public interface Listener
      public void onException(Exception e);

      public void postWeight(double weight, boolean steady);


      private ConnectionReader m_Reader;
      private Listener m_Listener = s_NullListener;
      private final ConnectionDefinition m_ConnectionDefinition;

      private volatile boolean m_Continue = false;

      private static final int s_Timeout = 5000;

      public Connection(final ConnectionDefinition connectionDef)
      m_ConnectionDefinition = connectionDef;
      start();


      @Override
      public void run()
      m_Continue = true;
      while (m_Continue)
      try
      m_Reader = m_ConnectionDefinition.createReader(s_Timeout);
      final Result result = new Result();

      while (m_Continue)
      m_Reader.read(result);

      final double weight = result.weight;
      final boolean steady = result.steady;

      Log.e(LOG_TAG, "Connection!!! " + String.valueOf(weight));

      m_Listener.postWeight(weight, steady);

      catch (final IOException e)
      handleException(e);
      finally
      if (m_Reader != null)
      try
      m_Reader.close();
      catch (final IOException ignored)
      // ignored

      m_Reader = null;




      private void handleException(final Exception e)
      if (m_Continue)
      m_Listener.onException(e);
      try
      Thread.sleep(s_Timeout);
      catch (final InterruptedException e1)




      public void start()
      if (running())
      throw new IllegalStateException("Connection already running");

      final String name = m_ConnectionDefinition.getNameOrAddress();
      //Log.e(LOG_TAG, "Estoy en START! ");
      new Thread(this, "Scale Connection: " + name).start();


      public void stop()
      m_Continue = false;
      if (m_Reader != null)
      try
      m_Reader.stop();
      catch (final IOException e)


      //Log.e(LOG_TAG, "Estoy en STOP! ");


      public boolean running()
      return m_Continue;


      public void setListener(final Listener listener)
      if (listener != null)
      m_Listener = listener;
      else
      m_Listener = s_NullListener;


      public void removeListener()
      m_Listener = s_NullListener;


      public ConnectionDefinition connectionDefinition()
      return m_ConnectionDefinition;


      private static Listener s_NullListener = new Listener()
      @Override
      public void onException(final Exception e)


      @Override
      public void postWeight(final double weight, final boolean steady)

      ;




      I created a method, where I try to listen to the different weight measures and Update the UI (this method works with one listener at the time. It updates the UI correctly):



       private void connectionListener()

      /*I GET THE CONNECTIONS DEFINED*/

      final List<ConnectionDefinition> connectionDefinition = Persistor.getInstance().connectionDefinitions();
      final ConnectionDefinition conDef = connectionDefinition.get(0);

      /*MY APPROACH IS TO CREATE RUNNABLES TO PUT THE TO WORK IN DIFFERENT THREATS. UNTIL NOW IT DIDNT WORK*/

      runnable1 = (new Runnable()
      final Connection connection1 = new Connection(conDef);
      @Override
      public void run()
      if(!connection1.running()) connection1.start();
      connection1.setListener(new Connection.Listener()
      @Override
      public void postWeight(final double weight, final boolean steady)
      mHandler1.post(new Runnable()
      public void run()
      if(!Double.isNaN(weight))
      Log.e(LOG_TAG, "Runnable 1 !!!");
      inputPesoRuedaDelanteraIzquierda.setText(String.valueOf(weight));
      //connection1.stop();


      );

      @Override
      public void onException(final Exception e)
      e.printStackTrace();
      //showMessage("Reintentando en 5 segs...");

      );
      /*
      try
      Thread.sleep(300);
      catch (InterruptedException e)
      e.printStackTrace();
      */

      );

      runnable2 = (new Runnable()
      final Connection connection2 = new Connection(conDef);
      @Override
      public void run()
      if(!connection2.running()) connection2.start();
      connection2.setListener(new Connection.Listener()
      @Override
      public void postWeight(final double weight, final boolean steady)
      mHandler1.post(new Runnable()
      public void run()
      if(!Double.isNaN(weight))
      Log.e(LOG_TAG, "Runnable 2 !!!");
      inputPesoRuedaDelanteraDerecha.setText(String.valueOf(weight));
      //connection2.stop();


      );


      @Override
      public void onException(final Exception e)
      e.printStackTrace();
      //showMessage("Reintentando en 5 segs...");

      );
      /*
      try
      Thread.sleep(300);
      catch (InterruptedException e)
      e.printStackTrace();
      */

      );

      worker = new WorkerThreadPool();
      worker.execute(runnable1);
      worker.execute(runnable2);

      /*
      Executor executor = new ThreadPerTaskExecutor();
      executor.execute(runnable1);
      executor.execute(runnable2);
      */
      //new Thread(runnable1).start();
      //new Thread(runnable2).start();





      As you can see I tried different approaches. I need help to implement the correct one I'm open to other ideas (Maybe listener iterators, even though I like the idea of multithreading)










      share|improve this question















      I'm developing an App that is meant to receive weight measures from industrial scales, one, two or more scales. The weight of each scale is sent through a RS232 interface continuously (I receive every 100 milliseconds the weight from the scale, this means that idle time is low. Once I start receiving the weight from the scale it doesn't stop) using a WiFi Serial adapter. I'm using a TCP Connection Socket and it works fine if I try to get the weight one scale at a time. What I try to achieve is this: I want to listen to two or four scales at the same time and update the UI in real time as I get the weight from the scale. (If I read the weight one scale at the time it works fine). I tried multithreading, ThreadPoolExecutor, ThreadHandlers, etc but I got several errors (pretty sure I didn't implement them correctly I'm new to multithreading). This is the code at the moment:



      The Connection Class receives the weight from the scales. I communicate the weight received through an interface to the other classes



      public class Connection implements Runnable 
      public static final String LOG_TAG = Connection.class.getSimpleName();
      public interface ConnectionDefinition
      public ConnectionReader createReader(int timeout) throws IOException;

      public String getNameOrAddress();


      public interface Listener
      public void onException(Exception e);

      public void postWeight(double weight, boolean steady);


      private ConnectionReader m_Reader;
      private Listener m_Listener = s_NullListener;
      private final ConnectionDefinition m_ConnectionDefinition;

      private volatile boolean m_Continue = false;

      private static final int s_Timeout = 5000;

      public Connection(final ConnectionDefinition connectionDef)
      m_ConnectionDefinition = connectionDef;
      start();


      @Override
      public void run()
      m_Continue = true;
      while (m_Continue)
      try
      m_Reader = m_ConnectionDefinition.createReader(s_Timeout);
      final Result result = new Result();

      while (m_Continue)
      m_Reader.read(result);

      final double weight = result.weight;
      final boolean steady = result.steady;

      Log.e(LOG_TAG, "Connection!!! " + String.valueOf(weight));

      m_Listener.postWeight(weight, steady);

      catch (final IOException e)
      handleException(e);
      finally
      if (m_Reader != null)
      try
      m_Reader.close();
      catch (final IOException ignored)
      // ignored

      m_Reader = null;




      private void handleException(final Exception e)
      if (m_Continue)
      m_Listener.onException(e);
      try
      Thread.sleep(s_Timeout);
      catch (final InterruptedException e1)




      public void start()
      if (running())
      throw new IllegalStateException("Connection already running");

      final String name = m_ConnectionDefinition.getNameOrAddress();
      //Log.e(LOG_TAG, "Estoy en START! ");
      new Thread(this, "Scale Connection: " + name).start();


      public void stop()
      m_Continue = false;
      if (m_Reader != null)
      try
      m_Reader.stop();
      catch (final IOException e)


      //Log.e(LOG_TAG, "Estoy en STOP! ");


      public boolean running()
      return m_Continue;


      public void setListener(final Listener listener)
      if (listener != null)
      m_Listener = listener;
      else
      m_Listener = s_NullListener;


      public void removeListener()
      m_Listener = s_NullListener;


      public ConnectionDefinition connectionDefinition()
      return m_ConnectionDefinition;


      private static Listener s_NullListener = new Listener()
      @Override
      public void onException(final Exception e)


      @Override
      public void postWeight(final double weight, final boolean steady)

      ;




      I created a method, where I try to listen to the different weight measures and Update the UI (this method works with one listener at the time. It updates the UI correctly):



       private void connectionListener()

      /*I GET THE CONNECTIONS DEFINED*/

      final List<ConnectionDefinition> connectionDefinition = Persistor.getInstance().connectionDefinitions();
      final ConnectionDefinition conDef = connectionDefinition.get(0);

      /*MY APPROACH IS TO CREATE RUNNABLES TO PUT THE TO WORK IN DIFFERENT THREATS. UNTIL NOW IT DIDNT WORK*/

      runnable1 = (new Runnable()
      final Connection connection1 = new Connection(conDef);
      @Override
      public void run()
      if(!connection1.running()) connection1.start();
      connection1.setListener(new Connection.Listener()
      @Override
      public void postWeight(final double weight, final boolean steady)
      mHandler1.post(new Runnable()
      public void run()
      if(!Double.isNaN(weight))
      Log.e(LOG_TAG, "Runnable 1 !!!");
      inputPesoRuedaDelanteraIzquierda.setText(String.valueOf(weight));
      //connection1.stop();


      );

      @Override
      public void onException(final Exception e)
      e.printStackTrace();
      //showMessage("Reintentando en 5 segs...");

      );
      /*
      try
      Thread.sleep(300);
      catch (InterruptedException e)
      e.printStackTrace();
      */

      );

      runnable2 = (new Runnable()
      final Connection connection2 = new Connection(conDef);
      @Override
      public void run()
      if(!connection2.running()) connection2.start();
      connection2.setListener(new Connection.Listener()
      @Override
      public void postWeight(final double weight, final boolean steady)
      mHandler1.post(new Runnable()
      public void run()
      if(!Double.isNaN(weight))
      Log.e(LOG_TAG, "Runnable 2 !!!");
      inputPesoRuedaDelanteraDerecha.setText(String.valueOf(weight));
      //connection2.stop();


      );


      @Override
      public void onException(final Exception e)
      e.printStackTrace();
      //showMessage("Reintentando en 5 segs...");

      );
      /*
      try
      Thread.sleep(300);
      catch (InterruptedException e)
      e.printStackTrace();
      */

      );

      worker = new WorkerThreadPool();
      worker.execute(runnable1);
      worker.execute(runnable2);

      /*
      Executor executor = new ThreadPerTaskExecutor();
      executor.execute(runnable1);
      executor.execute(runnable2);
      */
      //new Thread(runnable1).start();
      //new Thread(runnable2).start();





      As you can see I tried different approaches. I need help to implement the correct one I'm open to other ideas (Maybe listener iterators, even though I like the idea of multithreading)







      java android multithreading sockets listener






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 10 at 11:52









      Kling Klang

      32.2k156287




      32.2k156287










      asked Nov 10 at 11:05









      Gonzalo Ortellado

      17336




      17336



























          active

          oldest

          votes











          Your Answer






          StackExchange.ifUsing("editor", function ()
          StackExchange.using("externalEditor", function ()
          StackExchange.using("snippets", function ()
          StackExchange.snippets.init();
          );
          );
          , "code-snippets");

          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "1"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );













          draft saved

          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53238305%2fmultithreading-using-sockets%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown






























          active

          oldest

          votes













          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes















          draft saved

          draft discarded
















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          To learn more, see our tips on writing great answers.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53238305%2fmultithreading-using-sockets%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Use pre created SQLite database for Android project in kotlin

          Darth Vader #20

          Ondo