public List <Device> GetDevices(IPEndPoint address) { byte[] request = FormAdbRequest("host:devices"); //$NON-NLS-1$ byte[] reply; Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { socket.Connect(address); socket.Blocking = true; if (!Write(socket, request)) { throw new IOException("failed asking for devices"); } AdbResponse resp = ReadAdbResponse(socket, false /* readDiagString */); if (!resp.IOSuccess || !resp.Okay) { this.LogError("Got timeout or unhappy response from ADB fb req: " + resp.Message); socket.Close( ); return(null); } reply = new byte[4]; if (!Read(socket, reply)) { this.LogError("error in getting data length"); socket.Close( ); return(null); } String lenHex = Encoding.Default.GetString(reply); int len = int.Parse(lenHex, System.Globalization.NumberStyles.HexNumber); reply = new byte[len]; if (!Read(socket, reply)) { this.LogError("error in getting data"); socket.Close( ); return(null); } List <Device> s = new List <Device> ( ); String[] data = Encoding.Default.GetString(reply).Split(new string[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries); foreach (var item in data) { s.Add(Device.CreateFromAdbData(item)); } return(s); } finally { socket.Close( ); } }