The best way (IMO) is to bridge the network of USB tethering(192.168.42.x) and the Wifi hotspot(192.168.43.x), but I don't have any solution to bridge them.
That said, I do have a solution to transfer files between PC and Laptop within the constraints mentioned in the question (with "no internet" exclusively).
The common point of interaction in our current setting is the Android device itself, which means the device can access both systems, if required. If only I can access the content of Laptop as well as PC from Android, then using some File manager the data transfer can be done.
Note that I didn't try this method on Windows 7 but the instructions shouldn't be different for other platforms.
Connect PC to Android via USB tethering, and Laptop to Android via Wifi hotspot. Note down the IP address for both the machines.
- Windows users see this to know the IP address; click here Linux(Ubuntu) users for the same.
- The IP address to be noted would be similar to 192.168.42.xyz and 192.168.43.abc, where xyz and abc are (+ve) integers, i.e. note the local IP address and not IP address from your ISP.
Setup an FTP server at both PC and Laptop.
- Windows users see this answer, Linux(Ubuntu) users see these answers : 1, 2. I advise Gadmin-Proftpd for GUI in the latter platform.
- While not necessary, run the server on port 21 (requires administrative/superuser privileges).
- While configuring, create an FTP user for your FTP server. e.g. User: u1 and Password:password1. Otherwise, if your program allows anonymous FTP session, then go ahead with it.
- Google is your friend in need, remember it since you might need it.
Install a file manager in Android that can browse network storage. I recommend ES File Explorer File Manager.
Launch ES File Explorer, swipe right from left edge to access Network → FTP → choose ftp.
For PC :
- Fill IP address (from step 1) in Server field.
- Leave port default to 21.
- Choose Active under Mode.
- Fill Username and Password that you created in Step 2. If you selected anonymous in step 2 then choose Anonymous and leave the credentials fields blank.
- Tap OK.
For Laptop :
- Repeat aforementioned steps for PC in this step with the exception of IP address and FTP credentials which has to be replaced with the ones for FTP server on Laptop.
If your FTP server is accessible and working fine, then ES File Explorer will create an entry with the name (probably) of local IP address of your PC/Laptop.
In FTP tab of ES File Explorer, select any entry and you'll be able to see the content of the running FTP server.
You can use cut-copy-paste-delete (subject to FTP server configuration) features of ES File Explorer on the content of these two network entries.
1. The data transfer speed is subjected to the resources available to Android.
2. You can run a server other than FTP. Make sure that server you decide can be mapped (supported) in a file manager in Android.
3. If your machine is running a firewall (most PC's either runs Windows Firewall, or an Antivirus does the same), then explicitly allow your FTP program to make and accept connections (it will be a great hassle if you don't). If it's feasible, temporarily disconnect both machines (disable Mobile data on Android as well) from Internet and disable firewall/Antivirus on both for that time being.
4. If your Android device is running a firewall (AFwall+ in my case), allow your file manger in it. It is something one might miss to do.
Unsuccessful method with reason unknown as of now:
1) I think the objective can be achieved by port forwarding at one interface. I found that the machine under USB-tethered network can access the wifi hotspot gateway (192.168.43.1) but could not ping a machine behind the latter. Vice versa wasn't true either. I planned to port-forward on hotspot interface so that a custom request to this
gateway IP address would be forwarded to a machine behind it. An e.g. would be: A Laptop connected to wifi hotspot is running a FTP server with IP address 192.168.43.32. I then do port-forwarding(Android rooted) as 192.168.43.1:21 → 192.168.43.32:21 i.e. the machine behind USB-tethered network with IP address 192.168.42.143 would be able to see 192.168.43.32:21 via 192.168.43.1:21. Looks easy to me. But Port-forwarding apps on Play Store didn't yield satisfactory results. Let me know via comments if somebody tries this method and achieves success.