Transfer data from android to java desktop application

梦想的初衷 提交于 2020-01-06 08:17:29

问题


I run an application in Android and a string value as an answer. Now I want to pass this result to the Java server which is on my localhost, i.e pass the value from Android code to Java desktop application.

I tried using this code, but when I run the client it says unfortunately the application has stopped.

It says:

android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
libcore.io.IoBridge.connectErrno(IoBridge.java:127)

I found from somewhere that I need to use asynctask for it. Can you please guide me on how to use asynctask here?

The IP address is my localhost's IP and port number is any random number.

I try to run the server and then the client. I even tried running client on emulator and on the actual device. The app closes. I am new to Android. What I am doing wrong?

Here's the code of the client:

    package com.example.client;

    import java.io.IOException;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.net.UnknownHostException;


    public class MainActivity extends Activity {

    private Socket client;
    private PrintWriter printwriter;
    private EditText textField;
    private Button button;
    private String messsage;

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    textField = (EditText) findViewById(R.id.editText1); //reference to the text field
    button = (Button) findViewById(R.id.button1); //reference to the send button

    //Button press event listener
    button.setOnClickListener(new View.OnClickListener() {

    public void onClick(View v) {

    messsage = textField.getText().toString(); //get the text message on the text field
    textField.setText(""); //Reset the text field to blank

    try {

    client = new Socket("10.0.2.2", 4444); //connect to server
    printwriter = new PrintWriter(client.getOutputStream(),true);
    printwriter.write(messsage); //write the message to output stream

    printwriter.flush();
    printwriter.close();
    client.close(); //closing the connection

    } catch (UnknownHostException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    });
    }}

And here's the code of the server:

    public class server {

    private static ServerSocket serverSocket;
    private static Socket clientSocket;
    private static InputStreamReader inputStreamReader;
    private static BufferedReader bufferedReader;
    private static String message;

    public static void main(String[] args) {

    try {
    serverSocket = new ServerSocket(4444); //Server socket

    } catch (IOException e) {
    System.out.println("Could not listen on port: 4444");
    }

    System.out.println("Server started. Listening to the port 4444");

    while (true) {
    try {

    clientSocket = serverSocket.accept(); //accept the client connection
    inputStreamReader = new InputStreamReader(clientSocket.getInputStream());
    bufferedReader = new BufferedReader(inputStreamReader); //get the client message
    message = bufferedReader.readLine();

    System.out.println(message);
    inputStreamReader.close();
    clientSocket.close();

    } catch (IOException ex) {
    System.out.println("Problem in message reading");
    }
    }

    }
    }

The Async Task code :

package com.example.client;

public class MainActivity extends Activity {
    private Socket client;
    private PrintWriter printwriter;
    private EditText textField;
    private Button button;
    private String messsage;

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    textField = (EditText) findViewById(R.id.editText1); //reference to the text field
    button = (Button) findViewById(R.id.button1);   //reference to the send button

    //Button press event listener
    button.setOnClickListener(new View.OnClickListener() {

    public void onClick(View v) {

    messsage = textField.getText().toString(); //get the text message on the text field
    textField.setText("");      //Reset the text field to blank

    try {

     client = new Socket("134.190.162.165", 44440);  //connect to server
     printwriter = new PrintWriter(client.getOutputStream(),true);
     printwriter.write(messsage);  //write the message to output stream

     printwriter.flush();
     printwriter.close();
     client.close();   //closing the connection

    } catch (UnknownHostException e) {
     e.printStackTrace();
    } catch (IOException e) {
     e.printStackTrace();
    }
    }
    });

    }


 }

回答1:


Use this on the PC side to get its IP:

String IPfromPC = InetAddress.getLocalHost().getHostAddress();

Use that IP in your Andoid app:

mSocket.connect(new InetSocketAddress(IPfromPC, 4444), 5000);


来源:https://stackoverflow.com/questions/21816005/transfer-data-from-android-to-java-desktop-application

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!