【问题标题】:Android scan for server socketAndroid 扫描服务器套接字
【发布时间】:2014-12-24 04:12:17
【问题描述】:

以下是我的主要活动代码,程序运行没有错误,但我无法获得由arduinoWiFi 盾牌运行的服务器的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;
            }
        }
    });
   }

   } 

【问题讨论】:

    标签: android sockets server


    【解决方案1】:

    得到了答案,但另一个问题是它运行速度太慢,无法扫描ip地址;

     public class MainActivity extends Activity {
    
    private Button connectPhones;
    private boolean connected = false;
    private String serverIP = "192.168.254.";
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        connectPhones = (Button) findViewById(R.id.scan);
        connectPhones.setOnClickListener(connectListener);
    
    }
    
    private OnClickListener connectListener = new OnClickListener() {
    
        @Override
        public void onClick(View v) {
    
            if (!connected) {
                    Thread cThread = new Thread(new ClientThread());
                    cThread.start();
            }
        }
    };
    
    public class ClientThread implements Runnable {
    
        public void run() {
    
            for (int i = 0; i < 255; i++){
                String ipadd = serverIP + i;
    
            try {
                Log.d("ClientActivity", "C: Connecting...");
                Socket socket = new Socket(ipadd, 50000);
                connected = true;
                if (connected) {
                    try {
                        Log.d("ClientActivity", "C: Sending command.");
                        PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket
                                    .getOutputStream())), true);
                            out.println("Hey Server im " + ipadd);
                            Log.d("ClientActivity", "C: Sent.");
                    } catch (Exception e) {
                        Log.e("ClientActivity", "S: Error", e);
                    }
                }
                socket.close();
                Log.d("ClientActivity", "C: Closed.");
            } catch (Exception e) {
                Log.e("ClientActivity", "C: Error", e);
                connected = false;
            }
            }
    
        }
    }
    
    
    }
    

    【讨论】:

    • 有什么建议可以让它更快地扫描 IP 地址吗?
    猜你喜欢
    • 2013-07-06
    • 2011-11-19
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 2023-03-11
    • 2021-08-30
    相关资源
    最近更新 更多