Как правильно написать TCP клиент-серверное приложение, чтобы оно могло работать не только в локальной сети?
"У меня статический ip, порты я открыл и на своём компьютере и на компьютере с клиентом."
статический ip у вас явно на роутере, скорее всего требуется с него проброс порта на ваш компьютер сделать.
На компьютере с клиентом порт открывать необходимости нет.
Пустите пинг и трассировку от друга до вас, чтобы узнать проблемный узел.

 Как вам написал, скорее всего, вы просто неправильно настроили сеть.