【发布时间】:2014-05-30 10:25:44
【问题描述】:
我有一个可以在模拟器上运行的应用,但在真实设备上测试时却不行。
整个程序:
public class MainActivity extends Activity {
Socket socket;
String strg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
connect();
}
private void connect()
{
socket = null;
Thread t = new Thread(new Runnable(){
@Override
public void run(){
try {
InetAddress serverAddr = InetAddress.getByName("xx.xx.xx.xx");
socket = new Socket(serverAddr, x);
strg = "ok";
runOnUiThread(new Runnable(){
@Override
public void run(){
((TextView)findViewById(R.id.output)).setText(strg);
}
});
socket.close();
} catch (IOException e) {
final IOException exp = e;
runOnUiThread(new Runnable(){
@Override
public void run(){
strg = "ex2 "+exp.getMessage();
((TextView)findViewById(R.id.output)).setText(strg);
}
});
}
}
});
t.start();
}
}
所以这是我所有的代码。
我连接到只能接受连接的外部 IP。
当我在模拟器上运行时strg 是“好的”并且服务器注册连接已经建立。
当我在设备上运行代码时,我收到错误消息。 "java.net.ConnectException: failed to connect to /xx.xx.xx.xx (port x): connect failed: ETIMEDOUT (Connection timed out)"
我有<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> &
<uses-permission android:name="android.permission.INTERNET" />(否则模拟器无法运行)
有什么建议吗?
【问题讨论】:
-
在 Android 上运行时,请确保您的端口号从
10.0.2.2开始。 -
您尝试使用外部 IP 地址。行。信息很明确。它无法连接。找出为什么。使用的端口是不是在路由器中没有转发?
标签: android sockets emulation device connect