quamotion/madb

SyncService "An error occurred while reading a response from ADB"

Closed this issue · 2 comments

So i'm making a program that mounts an android device as a virtual hard drive because the MTP protocol is very slow and i wanna take full advantage of USB 3 on my phone.
The easiest way i found is by using this library that i used for a lot of projects and dokan-dotnet
Everything is going well but i can't get SyncService to work. i am using the same IAdbSocket as the DeviceMonitor.
but when i create the SyncService using Sync = new SyncService(socket, device);, i always get the same AdbException.

Here's all the details about it and here's the code

Am i doing something wrong?

  HResult=0x80131500
  Message=An error occurred while reading a response from ADB: 
  Source=SharpAdbClient
  StackTrace:
   at SharpAdbClient.AdbSocket.ReadAdbResponse()
   at SharpAdbClient.AdbSocket.SetDevice(DeviceData device)
   at SharpAdbClient.SyncService.Open()
   at SharpAdbClient.SyncService..ctor(IAdbSocket socket, DeviceData device)
   at ADBUSBDrive.VirtualDrive..ctor(DeviceData device, IAdbSocket client, Char letter) in D:\source\repos\ADBUSBDrive\ADBUSBDrive\VirtualDrive.cs:line 36
   at ADBUSBDrive.Program.Monitor_DeviceConnected(Object sender, DeviceDataEventArgs e) in D:\source\repos\ADBUSBDrive\ADBUSBDrive\Program.cs:line 42
   at SharpAdbClient.DeviceMonitor.OnDeviceConnected(DeviceDataEventArgs e)
   at SharpAdbClient.DeviceMonitor.UpdateDevices(List 1 devices)
   at SharpAdbClient.DeviceMonitor.ProcessIncomingDeviceData(String result)
   at SharpAdbClient.DeviceMonitor.<DeviceMonitorLoopAsync>d__32.MoveNext()

  This exception was originally thrown at this call stack:
    [External Code]
    ADBUSBDrive.VirtualDrive.VirtualDrive(SharpAdbClient.DeviceData, SharpAdbClient.IAdbSocket, char) in VirtualDrive.cs
    ADBUSBDrive.Program.Monitor_DeviceConnected(object, SharpAdbClient.DeviceDataEventArgs) in Program.cs
    [External Code]

If you need more info, ask and i'll give you all the additional info you need.

Update: i found out that if the device is already plugged in, i get that exception, while if i plug in the device after the DeviceMonitor started, i get a System.FormatException. Here's the details:

System.FormatException
  HResult=0x80131537
  Message=Input string was not in a correct format.
  Source=mscorlib
  StackTrace:
   at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
   at SharpAdbClient.AdbSocket.ReadString()
   at SharpAdbClient.AdbSocket.ReadAdbResponseInner()
   at SharpAdbClient.AdbSocket.ReadAdbResponse()
   at SharpAdbClient.AdbSocket.SetDevice(DeviceData device)
   at SharpAdbClient.SyncService.Open()
   at SharpAdbClient.SyncService..ctor(IAdbSocket socket, DeviceData device)
   at ADBUSBDrive.VirtualDrive..ctor(DeviceData device, IAdbSocket client, Char letter) in D:\source\repos\ADBUSBDrive\ADBUSBDrive\VirtualDrive.cs:line 36
   at ADBUSBDrive.Program.Monitor_DeviceConnected(Object sender, DeviceDataEventArgs e) in D:\source\repos\ADBUSBDrive\ADBUSBDrive\Program.cs:line 42
   at SharpAdbClient.DeviceMonitor.OnDeviceConnected(DeviceDataEventArgs e)
   at SharpAdbClient.DeviceMonitor.UpdateDevices(List`1 devices)
   at SharpAdbClient.DeviceMonitor.ProcessIncomingDeviceData(String result)
   at SharpAdbClient.DeviceMonitor.<DeviceMonitorLoopAsync>d__32.MoveNext()

  This exception was originally thrown at this call stack:
    [External Code]
    ADBUSBDrive.VirtualDrive.VirtualDrive(SharpAdbClient.DeviceData, SharpAdbClient.IAdbSocket, char) in VirtualDrive.cs
    ADBUSBDrive.Program.Monitor_DeviceConnected(object, SharpAdbClient.DeviceDataEventArgs) in Program.cs
    [External Code]

I found the issue. i was using the same IADBSocket as my DeviceMonitor.
Creating a new one solved the issue. Sync = new SyncService(new AdbSocket(new IPEndPoint(IPAddress.Loopback, AdbClient.AdbServerPort)), device);