在code插座ClientSocket的=新的Socket();在崩溃的Andr​​oid应用。为什么? [英] The code Socket clientSocket = new Socket(); crashes in android app. Why?

查看:151
本文介绍了在code插座ClientSocket的=新的Socket();在崩溃的Andr​​oid应用。为什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是标准的客户端code将字符串发送到我的服务器。它完美的作品,当我运行从Eclipse的Java项目,但是当我运行通过一个按钮一样code在我的Andr​​oid应用程序这是行不通的。调试后,我得到了在我行尝试code崩溃

插座ClientSocket的=新的Socket(192.168.1.91,6789);

请帮我。

 公共无效button2OnClick(查看K){    //测试服务器连接
    尝试{        串句;        串modifiedSentence;
        的BufferedReader inFromUser =新的BufferedReader(新的InputStreamReader(System.in));
        ClientSocket的插座=新的Socket(192.168.1.91,6789);
        Button按钮=(按钮)K;
        ((按钮)K).setText(完成);
        DataOutputStream类outToServer =新的DataOutputStream类(clientSocket.getOutputStream());
        的BufferedReader inFromServer =新的BufferedReader(新的InputStreamReader(clientSocket.getInputStream()));
        一句话=与Android连接成功;
        outToServer.writeBytes(句+的'\\ n');
        modifiedSentence = inFromServer.readLine();
        clientSocket.close();
    }
    赶上(例外IO){    }}


解决方案

由于您从主线程做到这一点,你已经将它移动到一个线程。

 新主题(新的Runnable(){
    公共无效的run(){
        //打开套接字
    }
})。开始();

接下来,您必须添加对AndroidManifest上网权限

 <使用许可权的android:NAME =android.permission.INTERNET对/>

在Android的,我们可以使用AsyncTask的女巫可以在后台操作完成对主线程执行操作。这将是:

 新的AsyncTask<太虚,太虚,太虚>(){        @覆盖
        保护无效doInBackground(虚空...... PARAMS){
            串modifiedSentence;
            的BufferedReader inFromUser =新的BufferedReader(新的InputStreamReader(System.in));
            ClientSocket的插座=新的Socket(192.168.1.91,6789);
            DataOutputStream类outToServer =新的DataOutputStream类(clientSocket.getOutputStream());
            的BufferedReader inFromServer =新的BufferedReader(新的InputStreamReader(clientSocket.getInputStream()));
            一句话=与Android连接成功;
            outToServer.writeBytes(句+的'\\ n');
            modifiedSentence = inFromServer.readLine();
            clientSocket.close();            返回null;
        }        @覆盖
        保护无效onPostExecute(){
            super.onPostExecute();
            Button按钮=(按钮)K;
            ((按钮)K).setText(完成);
        }
    }。执行();

I am using a standard client code to send a string to my server. It works perfect when I am running a java project from eclipse but it doesn't work when I am running the same code via a button on my android application. After debugging I got my try code crashes in the line

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

Please help me.

    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){

    }



}

解决方案

Because you do it from the main thread, you have move it to a Thread.

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

Next you have to add the internet permission on the AndroidManifest

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

In android we can use AsyncTask witch can perform actions on main thread when the background operation is finished. It will be :

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();

这篇关于在code插座ClientSocket的=新的Socket();在崩溃的Andr​​oid应用。为什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆