Java Connect异常:无法连接到本地端口80

时间:2014-05-26 18:08:34

标签: android mysql apache port80

我正在使用后端MySQL,PHP在Android中构建一个聊天应用程序,并在Apache的本地网络上运行。但是,当用户尝试注册时,LogCat会显示错误“Java.net.ConnectionException:无法连接到/'计算机IP'/(端口80):连接失败:EHOSTUNREACH(无主机路由)”< / p>

我在端口80和433上配置了Apache服务器,Android应用程序连接到“computers ip”/ databasename,而不是“localhost”。用于注册的代码如下所示。 我已多次查看代码但无法找到连接无法建立的原因

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.baidar.androidChatter.interfacer.Manager;
import com.baidar.androidChatter.serve.MessagingService;


public class SigningUp extends Activity {

    private static final int FILL_ALL_FIELDS = 0;
    protected static final int TYPE_SAME_PASSWORD_IN_PASSWORD_FIELDS = 1;
    private static final int SIGN_UP_FAILED = 9;
    private static final int SIGN_UP_USERNAME_CRASHED = 3;
    private static final int SIGN_UP_SUCCESSFULL = 4;
    protected static final int USERNAME_AND_PASSWORD_LENGTH_SHORT = 5;


    //private static final String SERVER_RES_SIGN_UP_FAILED = "0";
    private static final String SERVER_RES_RES_SIGN_UP_SUCCESFULL = "1";
    private static final String SERVER_RES_SIGN_UP_USERNAME_CRASHED = "2";



    private EditText usernameText;
    private EditText passwordText;
    private EditText eMailText;
    private EditText passwordAgainText;
    private Manager imService;
    private Handler handler = new Handler();

    private ServiceConnection mConnection = new ServiceConnection() {


        public void onServiceConnected(ComponentName className, IBinder service) {
            // This is called when the connection with the service has been
            // established, giving us the service object we can use to
            // interact with the service.  Because we have bound to a explicit
            // service that we know is running in our own process, we can
            // cast its IBinder to a concrete class and directly access it.
            imService = ((MessagingService.IMBinder)service).getService();  


        }

        public void onServiceDisconnected(ComponentName className) {
            // This is called when the connection with the service has been
            // unexpectedly disconnected -- that is, its process crashed.
            // Because it is running in our same process, we should never
            // see this happen.
            imService = null;
            Toast.makeText(SigningUp.this, R.string.local_service_stopped,
                    Toast.LENGTH_SHORT).show();
        }
    };

    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);    



            setContentView(R.layout.signingup);
            setTitle("Sign up");

            // Added to test a stack overflow addition
            bindService(new Intent(SigningUp.this, MessagingService.class), mConnection , Context.BIND_AUTO_CREATE);

            Button signUpButton = (Button) findViewById(R.id.signUp);
            Button cancelButton = (Button) findViewById(R.id.cancel_signUp);
            usernameText = (EditText) findViewById(R.id.userName);
            passwordText = (EditText) findViewById(R.id.password);  
            passwordAgainText = (EditText) findViewById(R.id.passwordAgain);  
            eMailText = (EditText) findViewById(R.id.email);

            signUpButton.setOnClickListener(new OnClickListener(){
                public void onClick(View arg0) 
                {                       
                    if (usernameText.length() > 0 &&        
                        passwordText.length() > 0 && 
                        passwordAgainText.length() > 0 &&
                        eMailText.length() > 0
                        )
                    {
                        //TODO check email address is valid

                        if (passwordText.getText().toString().equals(passwordAgainText.getText().toString())){

                            if (usernameText.length() >= 5 && passwordText.length() >= 5) {

                                    Thread thread = new Thread(){
                                        String result = new String();
                                        @Override
                                        public void run() {

                                            Log.d("problem", "The value of result is " + result.toString());

                                            result = imService.signUpUser(usernameText.getText().toString(), 
                                                    passwordText.getText().toString(), 
                                                    eMailText.getText().toString());

                                            handler.post(new Runnable(){

                                                public void run() {
                                                    // Added the "result != null &&" to the if 
                                                    if (result != null && result.equals(SERVER_RES_RES_SIGN_UP_SUCCESFULL)) { 
                                                        Toast.makeText(getApplicationContext(),R.string.signup_successfull, Toast.LENGTH_LONG).show();
                                                        //showDialog(SIGN_UP_SUCCESSFULL);
                                                    }
                                                    else if (result != null && result.equals(SERVER_RES_SIGN_UP_USERNAME_CRASHED)){
                                                        Toast.makeText(getApplicationContext(),R.string.signup_username_crashed, Toast.LENGTH_LONG).show();
                                                        //showDialog(SIGN_UP_USERNAME_CRASHED);
                                                    }
                                                    else  //if (result.equals(SERVER_RES_SIGN_UP_FAILED)) 
                                                    {
                                                        Toast.makeText(getApplicationContext(),R.string.signup_failed, Toast.LENGTH_LONG).show();
                                                        //showDialog(SIGN_UP_FAILED);
                                                    }           
                                                }

                                            });
                                        }

                                    };
                                    thread.start();
                            }
                            else{
                                Toast.makeText(getApplicationContext(),R.string.username_and_password_length_short, Toast.LENGTH_LONG).show();
                                //showDialog(USERNAME_AND_PASSWORD_LENGTH_SHORT);
                            }                           
                        }
                        else {
                            Toast.makeText(getApplicationContext(),R.string.signup_type_same_password_in_password_fields, Toast.LENGTH_LONG).show();
                            //showDialog(TYPE_SAME_PASSWORD_IN_PASSWORD_FIELDS);
                        }

                    }
                    else {
                        Toast.makeText(getApplicationContext(),R.string.signup_fill_all_fields, Toast.LENGTH_LONG).show();
                        //showDialog(FILL_ALL_FIELDS);

                    }               
                }           
            });

            cancelButton.setOnClickListener(new OnClickListener(){
                public void onClick(View arg0) 
                {                       
                    finish();                   
                }               
            });


        }


    protected Dialog onCreateDialog(int id) 
    {       

        switch (id) 
        {
            case TYPE_SAME_PASSWORD_IN_PASSWORD_FIELDS:         
                return new AlertDialog.Builder(SigningUp.this)       
                .setMessage(R.string.signup_type_same_password_in_password_fields)
                .setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        /* User clicked OK so do some stuff */
                    }
                })        
                .create();          
            case FILL_ALL_FIELDS:               
                return new AlertDialog.Builder(SigningUp.this)       
                .setMessage(R.string.signup_fill_all_fields)
                .setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        /* User clicked OK so do some stuff */
                    }
                })        
                .create();
            case SIGN_UP_FAILED:
                return new AlertDialog.Builder(SigningUp.this)       
                .setMessage(R.string.signup_failed)
                .setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        /* User clicked OK so do some stuff */
                    }
                })        
                .create();
            case SIGN_UP_USERNAME_CRASHED:
                return new AlertDialog.Builder(SigningUp.this)       
                .setMessage(R.string.signup_username_crashed)
                .setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        /* User clicked OK so do some stuff */
                    }
                })        
                .create();
            case SIGN_UP_SUCCESSFULL:
                return new AlertDialog.Builder(SigningUp.this)       
                .setMessage(R.string.signup_successfull)
                .setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        finish();
                    }
                })        
                .create();  
            case USERNAME_AND_PASSWORD_LENGTH_SHORT:
                return new AlertDialog.Builder(SigningUp.this)       
                .setMessage(R.string.username_and_password_length_short)
                .setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        /* User clicked OK so do some stuff */
                    }
                })        
                .create();
            default:
                return null;

        }


    }

    @Override
    protected void onResume() {
        bindService(new Intent(SigningUp.this, MessagingService.class), mConnection , Context.BIND_AUTO_CREATE);

        super.onResume();
    }

    @Override
    protected void onPause() 
    {
        unbindService(mConnection);
        super.onPause();
    }



}

2 个答案:

答案 0 :(得分:2)

问题的解决方案:当我应该访问(计算机IP)时,我正在访问(计算机IP)/数据库:端口#/数据库,然后将该端口添加到防火墙。

答案 1 :(得分:0)

我有类似的问题,过了一段时间后我发现Android设备认为HE是本地主机,无法直接连接到我的计算机的localhost服务器。尝试连接到您自己的计算机的IP而不是本地主机。花了整整一个下午来弄清楚

编辑:搜索了一下后,我找到了救了我的文章: Android connection to localhost