为什么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();