Java 异步任务-Can';t通过插座连接

Java 异步任务-Can';t通过插座连接,java,android,sockets,android-asynctask,Java,Android,Sockets,Android Asynctask,我试图通过套接字在Android应用程序和Python脚本之间建立连接 这段Java代码在我的Python服务器上运行得非常好 import java.io.*; import java.net.*; public class client { public static void main(String[] args) { try{ Socket s=new Socket("localhost",5000); DataO

我试图通过套接字在Android应用程序和Python脚本之间建立连接

这段Java代码在我的Python服务器上运行得非常好

import java.io.*;
import java.net.*;

public class client {
    public static void main(String[] args) {
        try{
            Socket s=new Socket("localhost",5000);
            DataOutputStream dout=new DataOutputStream(s.getOutputStream());
            dout.writeUTF("Hello Server");
            dout.flush();
            dout.close();
            s.close();
        }catch(Exception e){System.out.println(e);}
    }
} 
然而,当我尝试在我的Android应用程序中实现它时(见下文),我感觉甚至没有调用
doInBackground()

import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

import java.io.DataOutputStream;
import java.net.Socket;


public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView myText = (TextView) findViewById(R.id.TextView1);
        Connect myConnect = new Connect();
        myConnect.execute();

        String myResult = Integer.toString(myConnect.getResult());

        myText.setText(myResult);
    }
}


class Connect extends AsyncTask<Void, Void, Integer> {

    int result = 0;

    @Override
    protected void onPreExecute(){
        result = 1;
    }

    @Override
    protected Integer doInBackground(Void... params) {
        try{
            result = 2;
            Socket s=new Socket("localhost",5000);
            DataOutputStream dout = new DataOutputStream(s.getOutputStream());
            dout.writeUTF("Hello Server");
            dout.flush();
            dout.close();
            s.close();
        }catch(Exception e){
            result = -1;
            return -1;
        }
        result = 3;
        return 3;
    }

    @Override
    protected void onProgressUpdate(Void... values) {
    }

    int getResult(){
        return result;
    }
}
导入android.os.AsyncTask;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.widget.TextView;
导入java.io.DataOutputStream;
导入java.net.Socket;
公共类MainActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView myText=(TextView)findViewById(R.id.TextView1);
Connect myConnect=new Connect();
myConnect.execute();
字符串myResult=Integer.toString(myConnect.getResult());
设置文本(myResult);
}
}
类连接扩展异步任务{
int结果=0;
@凌驾
受保护的void onPreExecute(){
结果=1;
}
@凌驾
受保护的整数doInBackground(Void…params){
试一试{
结果=2;
套接字s=新套接字(“本地主机”,5000);
DataOutputStream dout=新的DataOutputStream(s.getOutputStream());
dout.writeUTF(“你好服务器”);
dout.flush();
dout.close();
s、 close();
}捕获(例外e){
结果=-1;
返回-1;
}
结果=3;
返回3;
}
@凌驾
受保护的void onProgressUpdate(void…值){
}
int getResult(){
返回结果;
}
}

我在这里错过了什么来让它发挥作用

Socket s=new Socket("localhost",5000);. 
那应该是

Socket s=new Socket("10.0.2.2",5000); 

当使用模拟器时

您缺少
localhost
的含义。。。被问到无数次使用搜索。。。提示:python脚本是否在设备/模拟器本身上运行?不那你为什么要用localhost呢?
localhost
指向
我自己
。所以在emulator上调用
localhost
,将尝试连接到emulator。在PC上调用它将连接到PC。在Android设备上调用它将尝试连接到
本身
。您是否也在模拟器上运行服务器?当然您不需要。此外,正如您可能期望的那样,
AsyncTask
从主线程异步运行。在调用
getResult
时,
doInBackground
尚未运行或尚未设置结果,即使地址正确specified@0xDEADC0DE很好,,但它从未命中服务器:C:\Python27\python.exe C:/Users/VWKY61Q/PycharmProjects/Sockets/server.py 0.0000-启动服务器0.0320-在5000 0.0320打开端口localhost-服务器已建立0.0320-等待client@VladMatvienko我添加了实际的IP,但什么也没发生