I got it to work!
This sounds really silly but I had an extra character when I was sending off the size of the PASV command in the send(). It went through because I had enough room for it, but adding the extra character probably remained in the buffer on the server side, muddling with the next command.
First, I started cleaning up. I modified all of the sizes in the commands to strlen(user) for example just to be consistent, since doing user.length() is better reserved for strings which i at one point had to do since I hate dealing with the char assembly in C++. To send a command via FTP, you must send a char *. in C++ that must be a const char or c_str(), it cannot be a string or even a char[].
Once I changed back to strlen for everything, I realized for my pasv command, since that was not a user, pass or stor variable, it had to be explicit. If you look at the size, I ended up putting 7, which was 1 more than it needed. And I did that because I thought I needed to pass off room for a NULL terminator. I did at one point have
but then changed it thinking I needed room for another null as mentioned.