Android Socket (Client - Server)

13,851

Solution 1

You should not connect network in "onCreate()", and can use "AsyncTask"

String advice = ""; 

class MySyncTask extends AsyncTask<Integer, Integer, String>{
@Override
protected String doInBackground(Integer... params) {
       try{
           Socket s = new Socket("127.0.0.1", 4242);
           InputStreamReader streamReader = new InputStreamReader(s.getInputStream()); 
           BufferedReader reader = new BufferedReader(streamReader);
           advice = reader.readLine();
           reader.close();
        }catch(Exception ex)
            ex.printStackTrace();
        }
        return advice;
    }

    protected void onPostExecute(String result) {
         tv.setText("Today you should: " + advice);
    }
    protected void onPreExecute() {
       log.i("start");
    }    
}

and add this code in you onCreate:

MySyncTask asyncTask=new MySyncTask (tv,pbar);
asyncTask.execute(1000);

My codes may have some error, you should check;

You can search "AsyncTask" on google, and have much information for it. It may be useful for you.

The works what need many time to do can not put in UI thread , mast put in background.

I am sorry for my bad english

I am sorry I have modfied my codes again

Solution 2

You need to flush after writing the data to make sure the data is sent. You can make the server on Android or Java, both works fine.Try this:

writer.println(advice);
writer.flush();

And dont forget the EOF for each and every data you send so the whole thing would be:

writer.println(advice + System.getProperty("line.separator"));
writer.flush();

Hope this helps.

Share:
13,851

Related videos on Youtube

user3050103
Author by

user3050103

Updated on July 21, 2022

Comments

  • user3050103
    user3050103 almost 2 years

    Hello dear programmers I need to your help.

    I made a very very very simple java socket (client - server) project, what worked well. But when I used that client code to make it for android, it is not working, but I am making only client code for android, the server code is in Java again(may be I should make the server code in android too?)

    Server(in Java)

    public class DailyAdviceServer{  
      public void go() {
        try {
            ServerSocket serverSock = new ServerSocket(16242, 50);
            while (true)
            {
                Socket sock = serverSock.accept();
    
                PrintWriter writer = new PrintWriter(sock.getOutputStream());
                String advice = getAdvice();
                writer.println(advice);
                writer.close();
                System.out.println("smth");
            }
        } catch (IOException ex)
        {
            ex.printStackTrace();
        }
    }
    
    
    
    public static void main(String[] args)
    {
        DailyAdviceServer server = new DailyAdviceServer();
        server.go();
    }
    

    }

    Client(in Android)

    public class MainActivity extends Activity  {
    
    
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            try {
                TextView tv = (TextView) findViewById(R.id.tv);     
                Socket s = new Socket("127.0.0.1", 4242);
                InputStreamReader streamReader = new InputStreamReader(s.getInputStream()); 
                BufferedReader reader = new BufferedReader(streamReader);
    
                String advice = reader.readLine();
    
                tv.setText("Today you should: " + advice);
                reader.close();
            }
            catch (IOException ex)
            {
                ex.printStackTrace();
            }
    
    
    
    }
    
  • user3050103
    user3050103 over 10 years
    Thank you very much, but I don't understand a thing. Why is the same code working for java client but not for Android client(With the same server and client, and it is working for java even without it: writer.println(advice + System.getProperty("line.separator")); writer.flush();
  • zapl
    zapl over 10 years
    @user3050103 you can not connect to 127.0.0.1 if client and server run on different devices. You need to put the server IP in that place and be connected over wifi so phone can reach that IP.
  • user3050103
    user3050103 over 10 years
    Thank you very much, now I would try this version.
  • user3050103
    user3050103 over 10 years
    Thank you very much again, I am new in StackOverflow so don't have reputation otherwise I would vote for your answer, sorry