我已经编写了一个应用程序来远程启动我的服务器.当启用WiFi时,应用程序在模拟器和智能手机(HTC欲望,Android 2.2)上都可以正常运行.但是,当禁用WiFi时,它不起作用.
在重新启动之前,我首先检查它是否已经运行.为此,我使用套接字,我首先连接到dyndns地址.之后我尝试连接到我的ip-box,在那里我可以通过套接字发送命令来打开我的电脑.
当与该套接字的连接失败时,我知道服务器没有运行.
相关代码是:
socket = new Socket();
socket.connect(new InetSocketAddress(serverName, port), 10000);
status = socket.isConnected() == true;
socket.close();
Run Code Online (Sandbox Code Playgroud)
如果有异常(SocketException)我知道服务器没有运行.当我打开WiFi时,这种方法非常有效.但是,如果WiFi没有打开,那么即使由于服务器不可用而无法建立连接,因此连接始终表示没问题.
有没有办法检查连接是否真的建立,即使WiFi被禁用?
欢迎任何建议!
谢谢,
鲁迪
尝试像这样打开你的套接字:
public boolean connect(String ip, int port) {
try {
this.clientSocket = new Socket(ip, port);
clientSocket.setSoTimeout(timeout);
this.outToServer = new DataOutputStream(clientSocket
.getOutputStream());
this.inFromServer = clientSocket.getInputStream();
isconnected = true;
} catch (IOException e) {
Log.e("TCPclient", "connection failed on " + ip + ":" + port);
isconnected = false;
return isconnected;
}
Log.e("TCPclient", "connection to " + ip + " sucessfull");
return isconnected;
}
Run Code Online (Sandbox Code Playgroud)
如果连接不成功,则会生成 IOException(在启用 wifi 且无服务器时工作,以及在未启用 wifi 时工作(HTCdesire 2.3))。
这段代码并不完全正确,它只是一个简短的版本
编辑 尝试像这样检查 wfi 状态(这不实用,但应该有效)
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (ni.isConnected()) {
Toast.makeText(this,"Wifi enabled", Toast.LENGTH_LONG).show();
Log.d("WiFiStateTestActivity", "WiFi!");
} else {
Toast.makeText(this,"Wifi not enabled", Toast.LENGTH_LONG).show();
Log.d("WiFiStateTestActivity", "not WiFi!");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3579 次 |
| 最近记录: |