无法让 android 应用程序连接到我本地计算机上的服务器
cannot get android app to connect to my server on my local computer
嗨,我是 android 的新手,我是
试图让我的 android 应用程序连接到我的本地计算机上 运行 的服务器。我只是想让应用程序首先向服务器发送一个简单的字符串消息,但一直出现错误。从打印出来的语句中,我可以看到该应用程序一旦在其中进行了尝试就终止了,因此我认为创建客户端连接存在问题。我还启用了 Internet,ACCESS_NETWORK_STATE,ACCESS_WIFI_STATE,READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE 权限
我尝试将本地主机更改为 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.
Localhost 是 phone 本身,而不是您的计算机。如果在模拟器上,localhost 是模拟器,而不是您的计算机 - 模拟器不知道它是模拟器,它有自己的 IP 地址。修复您正在使用的 IP。
我相信这绝对只是您的 IP 问题,您显然给 ti 了错误的 IP 地址,因为其他一切都很好。我建议访问终端并使用 ifconfig 命令查找您的 ip 或访问您的网络设置,如果您使用 mac 就像我是 select 网络,高级选项,select tcp/ip 选项卡并使用 ipv4 地址作为 ip 地址。如果这不起作用,请尝试使用不同的端口或检查本地计算机上的防火墙设置。希望有所帮助。
嗨,我是 android 的新手,我是 试图让我的 android 应用程序连接到我的本地计算机上 运行 的服务器。我只是想让应用程序首先向服务器发送一个简单的字符串消息,但一直出现错误。从打印出来的语句中,我可以看到该应用程序一旦在其中进行了尝试就终止了,因此我认为创建客户端连接存在问题。我还启用了 Internet,ACCESS_NETWORK_STATE,ACCESS_WIFI_STATE,READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE 权限
我尝试将本地主机更改为 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.
Localhost 是 phone 本身,而不是您的计算机。如果在模拟器上,localhost 是模拟器,而不是您的计算机 - 模拟器不知道它是模拟器,它有自己的 IP 地址。修复您正在使用的 IP。
我相信这绝对只是您的 IP 问题,您显然给 ti 了错误的 IP 地址,因为其他一切都很好。我建议访问终端并使用 ifconfig 命令查找您的 ip 或访问您的网络设置,如果您使用 mac 就像我是 select 网络,高级选项,select tcp/ip 选项卡并使用 ipv4 地址作为 ip 地址。如果这不起作用,请尝试使用不同的端口或检查本地计算机上的防火墙设置。希望有所帮助。