【问题标题】:The code Socket clientSocket = new Socket(); crashes in android app. Why? [duplicate]代码 Socket clientSocket = new Socket();在安卓应用程序中崩溃。为什么? [复制]
【发布时间】:2015-07-11 14:31:37
【问题描述】:

我正在使用标准客户端代码向我的服务器发送一个字符串。当我从 eclipse 运行一个 java 项目时它工作得很好,但是当我通过我的 android 应用程序上的一个按钮运行相同的代码时它不起作用。调试后,我的尝试代码崩溃了

Socket clientSocket = new Socket("192.168.1.91", 6789);

请帮帮我。

    public void button2OnClick(View k){

    //Testing Server Connection
    try{

        String sentence;

        String modifiedSentence;
        BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in));
        Socket clientSocket = new Socket("192.168.1.91", 6789);
        Button button=(Button) k;
        ((Button) k).setText("Done");
        DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
        BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        sentence = "connection with android successful";
        outToServer.writeBytes(sentence + '\n');
        modifiedSentence = inFromServer.readLine();
        clientSocket.close();


    }
    catch(Exception IO){

    }



}

【问题讨论】:

标签: java android sockets


【解决方案1】:

因为你是从主线程做的,所以你已经把它移到了一个线程。

new Thread(new Runnable(){
    public void run(){
        //open socket
    }
}).start();

接下来您必须在 AndroidManifest 上添加互联网权限

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

在 android 中我们可以使用 AsyncTask 女巫可以在后台操作完成后在主线程上执行操作。它将是:

new AsyncTask<Void,Void,Void>(){

        @Override
        protected Void doInBackground(Void... params) {
            String modifiedSentence;
            BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in));
            Socket clientSocket = new Socket("192.168.1.91", 6789);
            DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
            BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            sentence = "connection with android successful";
            outToServer.writeBytes(sentence + '\n');
            modifiedSentence = inFromServer.readLine();
            clientSocket.close();

            return null;
        }

        @Override
        protected void onPostExecute() {
            super.onPostExecute();
            Button button=(Button) k;
            ((Button) k).setText("Done");
        }
    }.execute();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多