【发布时间】:2014-12-24 04:12:17
【问题描述】:
以下是我的主要活动代码,程序运行没有错误,但我无法获得由arduino 和WiFi 盾牌运行的服务器的IP 地址。当他看到服务器并想要显示其 IP 地址时,我想更新ListView。
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;
}
}
});
}
}
【问题讨论】: