Android:扫描TCP套接字服务器IP(已知端口)

Android:扫描TCP套接字服务器IP(已知端口),android,arrays,Android,Arrays,我正在扫描我的子网,查找端口7打开且使用并行线程的套接字服务器。我总是在服务器端看到一个“连接”和“断开”的快照,所以基本代码应该可以 但是如何在阵列中收集找到的(成功连接的)服务器IP 任何帮助都将不胜感激 public class MainActivity extends Activity{ Button buttonConnect; Socket socket = null; int port = 7; int timeout = 200; final ExecutorService

我正在扫描我的子网,查找端口7打开且使用并行线程的套接字服务器。我总是在服务器端看到一个“连接”和“断开”的快照,所以基本代码应该可以

但是如何在阵列中收集找到的(成功连接的)服务器IP

任何帮助都将不胜感激

public class MainActivity extends Activity{
Button buttonConnect;

Socket socket = null;
int port = 7;
int timeout = 200;

final ExecutorService es = Executors.newFixedThreadPool(20);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    buttonConnect = (Button) findViewById(R.id.button1);

    buttonConnect.setOnClickListener(buttonConnectOnClickListener);

}

Button.OnClickListener buttonConnectOnClickListener = new Button.OnClickListener() {

    @Override
    public void onClick(View v) {

        String iIPv4 = "192.168.0.1";
        iIPv4 = iIPv4.substring(0, iIPv4.lastIndexOf("."));
        iIPv4 += ".";

        for (int i = 1; i < 255; i++) {
            findSocket(es, iIPv4 + i, port, timeout);
        }
    }
};

public static Future<Boolean> findSocket(final ExecutorService es,
        final String ip, final int port, final int timeout) {
    return es.submit(new Callable<Boolean>() {
        @Override
        public Boolean call() {
            try {
                Socket socket = new Socket();
                socket.connect(new InetSocketAddress(ip, port), timeout);
                socket.close();
                return true;
            } catch (Exception ex) {
                return false;
            }
        }
    });
}
公共类MainActivity扩展活动{
按钮连接;
套接字=空;
int端口=7;
int超时=200;
final Executors服务es=Executors.newFixedThreadPool(20);
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonConnect=(按钮)findViewById(R.id.button1);
buttonConnect.setOnClickListener(buttonConnectOnClickListener);
}
Button.OnClickListener ButtonConConnectionClickListener=新建按钮。OnClickListener(){
@凌驾
公共void onClick(视图v){
字符串iIPv4=“192.168.0.1”;
iIPv4=iIPv4.子字符串(0,iIPv4.lastIndexOf(“.”);
iIPv4+=”;
对于(int i=1;i<255;i++){
findSocket(es、iIPv4+i、端口、超时);
}
}
};
公共静态未来findSocket(最终执行者,
最终字符串ip、最终整数端口、最终整数超时){
返回es.submit(新的可调用(){
@凌驾
公共布尔调用(){
试一试{
套接字=新套接字();
连接(新的InetSocketAddress(ip,端口),超时);
socket.close();
返回true;
}捕获(例外情况除外){
返回false;
}
}
});
}

}

谢谢您的回复。不幸的是,arrayList的长度/大小始终为0。我还必须添加7秒超时才能使此代码正常工作。大约需要30秒。扫描子网。所以你的问题不是你的标题说的是什么,而是一个琐碎的数据结构问题?
ArrayList<String> arrayList = new ArrayList<String>();
arayList.add(ip);