为什么android应用程序不能在真实设备上运行?

为什么android应用程序不能在真实设备上运行?,android,vb.net,sockets,Android,Vb.net,Sockets,我有一个应用程序,当我使用模拟器工作时,它会向套接字服务器发送消息,但当我转到智能手机时,应用程序不会发送消息 现在我将展示向服务器发送消息的Android代码 package com.javacodegeeks.android.androidsocketclient; import java.io.PrintWriter; import java.net.InetAddress; import java.net.Socket; import android.app.Activity; im

我有一个应用程序,当我使用模拟器工作时,它会向套接字服务器发送消息,但当我转到智能手机时,应用程序不会发送消息


现在我将展示向服务器发送消息的Android代码

package com.javacodegeeks.android.androidsocketclient;

import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class Client extends Activity {
    private static final String SERVER_IP = "10.0.0.100";
    private static final int SERVER_PORT = 11000;
    private Socket socket;

    private EditText InputText = null;
    private Button ButtonSend = null;
    private TextView LabelReceived = null;
    private Thread thread = null;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);      

        InputText = (EditText)findViewById(R.id.InputText);
        ButtonSend = (Button)findViewById(R.id.ButtonSend);
        LabelReceived = (TextView)findViewById(R.id.LabelReceived);
        thread = new Thread(new ClientThread());

        if (thread != null) {
            thread.start();
        }

        ButtonSend.setOnClickListener(new OnClickListener() {
            public void onClick(View arg0) {
                try {
                    if (socket != null) {
                        PrintWriter out = new PrintWriter(socket.getOutputStream());

                        out.println(InputText.getText().toString());
                        out.flush();

                        out.close();
                    } else {
                        LabelReceived.setText("socket is null!");
                    }
                } catch (Exception e) {
                    LabelReceived.setText(e.getMessage());
                }
            }
        });
    }

    class ClientThread implements Runnable {
        public void run() {
            try {
                InetAddress IAddress = InetAddress.getByName(SERVER_IP);
                socket = new Socket(IAddress, SERVER_PORT);
            } catch (Exception e) {
                socket = null;
            }
        }
    }
}
我也使用标签来显示错误,当我按下发送按钮时,会出现“套接字为空”


这些代码今天在我上学之前就已经生效了,但当我到达学校时,我又尝试了一次,但不再生效。所以我认为这是一个简单的问题,但它非常隐蔽。

尝试将您对服务器的请求转移到异步任务或服务中

public class MyTask extends AsyncTask<Void, Void, Void> {
@Override
 protected void onPreExecute() {
       something
 }
 protected void onPostExecute(Void result) {
      something
}
protected Void doInBackground(Void... arg0) {
      something
}

问题与我预想的大不相同。只是我的防病毒软件阻止了连接,我添加了一个例外,现在套接字可以工作了。

假设:你的模拟器可以访问套接字服务器的本地intranet,而如果你的真实设备在3G(而不是Wifi)上,那么它肯定无法工作。我猜尝试连接到错误的ip地址是不可能的。你需要显示一些代码,这样我们可以帮助你我的设备是WI-FI的。我的代码在今天早上生效。我设置了INTERNET权限。我将编辑我的问题,并发布我正在使用的代码。
public class MyTask extends AsyncTask<Void, Void, Void> {
@Override
 protected void onPreExecute() {
       something
 }
 protected void onPostExecute(Void result) {
      something
}
protected Void doInBackground(Void... arg0) {
      something
}
MyTask mt = new MyTask();           
mt.execute();