Was having this problem a couple days ago with BF2, and FOREVER with 2142. Couldn't play 2142 at all because I kept getting kicked by There is a problem with your connetion. Opening ports didn't help at all. I know this doesn't sound like an internet fix, but it did work for me. Set the BF2.exe affinity to just one core. Alt+Cntl+Delete, Processes Tab, right click on BF2.ext, set Affinity, uncheck one. Usually I only have to do that with older games like Warcraft 3, but I was pleasantly surprised that it let me play BF2142.
This fixed my problem, strangely enough.
Sorry for the kinda late reply.