我有一个适用于模拟器的应用程序,但在真实设备上测试时没有。
整个计划:
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" />
&amp;
<uses-permission android:name="android.permission.INTERNET" />
(否则它无法在模拟器上工作。)
有什么建议吗?
答案 0 :(得分:0)
阅读有关StrictMode的内容。您无法在UI(磁盘,内存,网络)中执行长时间操作。仿真器不如真实设备严格。
答案 1 :(得分:0)
所以我找到了解决方案,服务器防火墙上的设置是错误的,这阻止了我的请求。谢谢greenapps:)