没有WIFi连接的Android套接字编程

我已经编写了一个应用程序来远程启动我的服务器。 在启用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();

如果发生异常(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;
}

如果连接不成功,它将产生一个IOException(在启用wifi且没有服务器的情况下工作,并且当wifi未启用时(HTC渴望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!");
      }
    }

不要忘记在manifest.xml中设置权限以允许您打开套接字。

链接地址: http://www.djcxy.com/p/10289.html

上一篇: Android socket programming without WIFi connection

下一篇: Generic way to create nested dictionary from flat list in python