简体   繁体   English

AsyncTask - 无法通过套接字连接

[英]AsyncTask - Can't connect via sockets

I am trying to establish a connection between an Android Application and a Python script via sockets.我正在尝试通过套接字在 Android 应用程序和 Python 脚本之间建立连接。

This Java code works absolutely fantastic with my Python server.这个 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);}
    }
} 

However, when I try to implement it in my Android application (see below), I have the feeling that the doInBackground() is not even called:但是,当我尝试在我的 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;
    }
}

在此处输入图片说明

What am I missing here to make it work?我在这里缺少什么才能使它工作?

Socket s=new Socket("localhost",5000);. 

That should be那应该是

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

when using an emulator.使用模拟器时。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM