无法让Android应用程序连接到我的本地计算机上的服务器

时间:2017-08-16 16:59:35

标签: java android sockets client-server dataoutputstream

嗨,我是Android和Im的新手 试图让我的Android应用程序连接到我的本地计算机上运行的服务器。我只是试图让应用程序首先向服务器发送一个简单的字符串消息,但不断收到错误。从打印输出语句中我可以看到应用程序在尝试输入时立即终止,因此我认为创建客户端连接存在问题。我还启用了Internet,ACCESS_NETWORK_STATE,ACCESS_WIFI_STATE,READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE权限

我尝试将localhost更改为InetAddress.getLocalHost()但仍无法正常工作

继承我的代码:

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.util.StringBuilderPrinter;
import android.view.View;
import android.widget.Button;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

import static java.net.InetAddress.getLocalHost;

public class MainActivity extends AppCompatActivity{
    private Button cam;
    private Socket client;
    DataOutputStream os;
    private String IP = "localhost";
    private static final String TAG = "testing";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (android.os.Build.VERSION.SDK_INT > 9)
        {
            StrictMode.ThreadPolicy policy = new                      
            StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
        }
        setContentView(R.layout.activity_main);



        cam = (Button) findViewById(R.id.Button_camera);
        cam.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                Log.v(TAG, "trying to connect to server");
                try {
                    client = new Socket("My IP address entered", 8080);
                    Log.v(TAG, "client socket initalised");
                    String hey = "hey";
                    os = new DataOutputStream(client.getOutputStream());
                    Log.v(TAG, "outptu stream created");
                    os.flush();
                    Log.v(TAG, "flush");
                    os.writeBytes(hey);
                    Log.v(TAG, "written to server");
                    os.close();


                } catch (UnknownHostException e) {
                    Log.v(TAG, "Unknown error");
                    Log.v(TAG, e.toString());
                } catch (IOException e) {
                    Log.v(TAG, "IO exception u numpty");
                    Log.v(TAG, e.toString());
                }
                Intent intent = new Intent(MainActivity.this, Main2Activity.class);
                startActivity(intent);



            }
        });

    }
}

我的代码打印出试图连接到服务器但没有到达任何其他打印输出语句的语句,而我的服务器仍然没有收到任何内容

 connect failed: ETIMEDOUT (Connection timed out)
ACTION_DOWN before UnsetPressedState. invoking mUnsetPressedState.run()
I/Choreographer: Skipped 3792 frames!  The application may be doing too much work on its main thread.

2 个答案:

答案 0 :(得分:0)

Localhost是手机本身,而不是您的计算机。如果在模拟器上,localhost是模拟器,而不是你的计算机 - 模拟器不知道它的模拟器,它有自己的IP地址。修复您正在使用的IP。

答案 1 :(得分:0)

我相信这肯定只是你的IP的一个问题,你显然给了错误的IP地址,因为其他一切都很好。我建议您访问终端并使用ifconfig命令查找您的IP或访问您的网络设置,如果您使用的是Mac,请选择网络,提前选项,选择tcp / ip选项卡并使用ipv4地址作为IP地址。如果这不起作用,请尝试使用其他端口或检查本地计算机上的防火墙设置。希望有所帮助。