Хм... Ну, давайте посмотрим, что это за провайдер хитрый такой:
RIPN Whois писал(а):inetnum: 213.158.16.0 - 213.158.31.255
...
route: 213.158.16.0/20
descr: Branch "Artelecom Arkhangelsk region"
descr: OJSC "North-West Telecom"
descr: Arkhangelsk, Russia
Таки шо мы видим? Пул динамических адресов размером 255*16=4080 штук. А теперь, внимание, вопрос: если у тебя, т.е. у сервера, динамический IP-адрес, то как твой клиент узнает, на каком именно из этих адресов его ждут на указанных тобой в коде портах (1002, 1005)? Это ему весь пул твоего провайдера перебирать придется, причем я более чем уверен, что примерно к середине перебора его просто забанят нахрен за DoS или Port Scan. Ну а синхронизация "IP over SMS" - да, это конечно сильно, только для реального приложения как-то... несерьезно

. Неужели той же аськой сложнее воспользоваться? Короче, вопрос согласования адресов должен решаться не так. Сейчас это для тебя не проблема, но на будущее учти. Это первое.
Далее, по моему опыту большинство провов закрывают все порты, кроме наиболее общеупотребимых - 80, 21, 25/110, 443, 1721, 121, ну и может еще с десяток наберется. Соотв-но, лично я не уверен, что до тебя хоть кто-то достучаться сможет по используемым тобой портам - твой пров просто не пропустит к тебе ни один пакет. Юзай что-нить распространенное, например тот же VPN-порт (TCP 1721), или HTTPS (TCP 443) - наверняка никто слова не скажет...
Как проверить, кто виноват в проблеме - твоя прога или твой провайдер? Очень просто: запускаешь на сервере сервер, а на клиенте в командной строке - вот это:
- Код: Выделить всё
telnet 213.158.21.129 1002
Если сервер запущен и ждет, то получение ошибки означает закрытость порта 1002 (в данном примере) на магистрали, т.е. у прова. Подбирай открытый адрес.