0
以下是我的主要活動代碼,該程序運行時沒有錯誤,但我無法獲取由arduino
和WiFi
護盾運行的服務器的IP地址。我想在他看到服務器並想顯示其IP地址時更新ListView
。Android掃描服務器套接字
public class MainActivity extends Activity {
ArrayList<PostList> server;
ArrayAdapter<PostList> adapter;
ListView server_list;
Socket socket = null;
int port = 50000;
int timeout = 1000;
final ExecutorService es = Executors.newFixedThreadPool(20);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button scan = (Button)findViewById(R.id.scan);
server_list = (ListView)findViewById(R.id.serverlist);
server = new ArrayList<PostList>();
scan.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
String iIPv4 = "192.168.254.0";
iIPv4 = iIPv4.substring(0, iIPv4.lastIndexOf("."));
iIPv4 += ".";
for (int i = 1; i < 255; i++) {
findSocket(es, iIPv4 + i, port, timeout);
}
adapter = new PostAdapter(MainActivity.this, server);
server_list.setAdapter(adapter);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
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();
ArrayList<PostList> server = new ArrayList<PostList>();
server.add(new PostList(ip));
return true;
} catch (Exception ex) {
return false;
}
}
});
}
}
任何建議,使其更快地掃描ipaddress? –